referring to fig1 to 12 , there are shown various modules that together form a compact printer system . individual modules can be attached and detached from the compact printer configuration to allow a user - definable solution to business - card sized printing . images can also be transferred from one compact printer to another without the use of a secondary computer system . modules have a minimal user - interface to allow straightforward interaction . a compact printer system configuration consists of a number of compact printer modules connected together . each compact printer module has a function that contributes to the overall functionality of the particular compact printer configuration . each compact printer module is typically shaped like part of a pen , physically connecting with other compact printer modules to form the complete pen - shaped device . the length of the compact printer device depends on the number and type of compact printer modules connected . the functionality of a compact printer configuration depends on the compact printer modules in the given configuration . the compact printer modules connect both physically and logically . the physical connection allows modules to be connected in any order , and the logical connection is taken care of by the compact printer serial bus — a bus that provides power , allows the modules to self configure and provides for the transfer of data . in terms of physical connection , most compact printer modules consist of a central body , a male connector at one end , and a female connector at the other . since most modules have both a male and female connector , the modules can typically be connected in any order . certain modules only have a male or a female connector , but this is determined by the function of the module . adaptor modules allow these single - connector modules to be connected at either end of a given compact printer configuration . a four wire physical connection between all the compact printer modules provides the logical connection between them in the form of the compact printer serial bus . the compact printer serial bus provides power to each module , and provides the means by which data is transferred between modules . importantly , the compact printer serial bus and accompanying protocol provides the means by which the compact printer system auto - configures , reducing the user - interface burden on the end - user . image processing modules including a printer module ( fig1 ), a camera module ( fig2 ), and a memory module ( fig3 ). image processing modules are primarily what sets the compact printer system apart from other pen - like devices . image processing modules capture , print , store or manipulate photographic images ; housekeeping modules including an adapter module ( fig1 ), an effects module ( fig8 ), a communications module ( fig4 ), and a timer module ( fig6 ). housekeeping modules provide services to other modules or extended functionality to other modules ; and isolated modules including a pen module ( fig1 ) and a laser module ( fig7 ). isolated modules are those that attach to the compact printer system but are completely independent of any other module . they do not necessarily require power , and may even provide their own power . isolated modules are defined because the functionality they provide is typically incorporated into other pen - like devices . although housekeeping modules and isolated modules are useful components in a compact printer system , they are extras in a system dedicated to image processing and photographic manipulation . life size ( 1 : 1 ) illustrations of the compact printer modules are shown in fig1 to 12 , and example configurations produced by connecting various modules together are shown in fig1 to 16 . fig1 shows a printer module that incorporates a compact printhead described in co - pending united states patent applications listed in the background section of this application , incorporated herewith by reference , and referred to herewith as a memjet printhead . the memjet printhead is a drop - on - demand 1600 dpi inkjet printer that produces bi - level dots in up to 4 colors to produce a printed page of a particular width . since the printhead prints dots at 1600 dpi , each dot is approximately 22 . 5 μm in diameter , and spaced 15 . 875 μm apart . because the printing is bi - level , the input image should be dithered or error - diffused for best results . typically a memjet printhead for a particular application is page - width . this enables the printhead to be stationary and allows the paper to move past the printhead . a memjet printhead is composed of a number of identical ½ inch memjet segments . the printer module 10 comprises a body 11 housing the memjet printhead . power is supplied by a three volt battery housed in battery compartment 12 . the printhead is activated to commence printing when a business card ( or similar sized printable media ) is inserted into slot 13 . male connector 14 and female connector 15 facilitate connection of other modules to the printer module 10 . fig2 shows a camera module 20 . the camera module provides a point - and - shoot camera component to the compact printer system as a means of capturing images . the camera module comprises a body 21 having a female connector 22 . a lens 23 directs an image to an image sensor and specialized image processing chip within the camera 24 . a conventional view finder 25 is provided as well as a lens cap 26 . an image is captured when the take button 27 is pushed . captured images are transferred to the printer module 10 for subsequent printing , manipulation , or storage . the camera module also contains a self - timer mode similar to that found on regular cameras . fig3 shows a memory module 30 comprising a body 31 , lcd 32 , in button 33 , out button 34 and select button 35 . the memory module 30 is a standard module used for storing photographic images captured by the camera 20 . the memory module stores 48 images , each of which can be accessed either at full resolution or at thumbnail resolution . full resolution provides read and write access to individual images , and thumbnail resolution provides read access to 16 images at once in thumbnail form . the memory module 30 attaches to other modules via a female connector 36 or male connector 37 . the male and female connectors allow the module to be connected at either end of a configuration . power is provided from the printer module 10 via the serial bus . a communications module 40 is shown in fig4 . the communications module 40 consists of a connector 41 and a cable 42 that terminates in an appropriate connector for a computer port , such as a usb port , rs232 serial port or parallel port . the communications module 40 allows the compact printer system to be connected to a computer . when so connected , images can be transferred between the computer and the various modules of the compact printer system . the communications module allows captured images to be downloaded to the computer , and new images for printing to be uploaded into the printer module 10 . a flash module 50 is shown in fig5 . the flash module 50 is used to generate a flash with flash cell 51 when taking photographs with the camera module 20 . the flash module attaches to other modules via female connector 52 and male connector 53 . it contains its own power source . the flash module is automatically selected by the camera module when required . a simple switch allows the flash module to be explicitly turned off to maximize battery life . fig6 shows a timer module 60 that is used to automate the taking of multiple photos with the camera module 20 , each photo separated by a specific time interval . the captured photos are stored in memory module 30 . any flash requirements are handled by the camera module 20 , and can therefore be ignored by the timer module . the timer module 60 consists of a body 61 housing a lcd 62 , start / stop button 63 and units button 64 . a select button 65 allows the user to select time units and the number of units are set by units button 64 . the timer module 60 includes a male connector 66 and female connector 67 . the timer module takes its power from the printer module 10 via the serial bus . a laser module 70 is shown in fig7 . the laser module 70 consists of a body 71 containing a conventional laser pointer operated by button 72 . as the laser module is a terminal module it only has one connector , which in the example is a male connector 73 . the laser module is an isolated module , in that it does not perform any image capture , storage , or processing . it exists as a functional addition to the compact printer system . it is provided because laser pointer services are typically incorporated into other pen - like devices . the laser module contains its own power supply and does not appear as a device on the serial bus . the effects module shown in fig8 is an image processing module . it allows a user to select a number of effects and applies them to the current image stored in the printer module 10 . the effects include borders , clip - art , captions , warps , color changes , and painting styles . the effects module comprises a body 81 housing custom electronics and a lcd 82 . a choose button 83 allows a user to choose between a number of different types of effects . a select button 84 allows the user to select one effect from the number of effects of the chosen type . pressing the apply button 85 applies the effect to image stored in the printer module 10 . the effects module obtains power from the serial bus . male connector 86 and female connector 87 allow the effects module to be connected to other compact printer system modules . fig9 shows a character module 90 that is a special type of effects module ( described above ) that only contains character clip - art effects of a given topic or genre . examples include the simpsons ®, star wars ®, batman ®, and dilbert ® as well as company specific modules for mcdonalds ® etc . as such it is an image processing module . it consists of a body 91 housing custom electronics and a lcd 92 . select button 93 allows the user to choose the effect that is to be applied with apply button 94 . the character module obtains power from the serial bus through male connector 95 and female connector 96 . the adaptor module 100 , shown in fig1 , is a female / female connector that allows connection between two modules that terminate in male connectors . a male / male connector ( not shown ) allows connection between two modules that terminate in female connectors . the adaptor module is a housekeeping module , in that it facilitates the use of other modules , and does not perform any specific processing of its own . all “ through ” modules have a male connector at one end , and a female connector at the other end . the modules can therefore be chained together , with each module connected at either end of the chain . however some modules , such as the laser module 70 , are terminating modules , and therefore have either a male or female connector only . such single - connector modules can only be connected at one end of the chain . if two such modules are to be connected at the one time , an adaptor module 100 is required . fig1 shows a pen module 110 which is a pen in a module form . it is an isolated module in that it attaches to the compact printer system but is completely independent of any other module . it does not consume or require any power . the pen module is defined because it is a convenient extension of a pen shaped , pen sized device . it may also come with a cap 111 . the cap may be used to keep terminating connectors clean in the case where the chain ends with a connector rather than a terminating module . to assist with accurately feeding a business card sized print media into slot 13 of the printer module 10 , a dispenser module 120 is provided as shown in fig1 . the dispenser module 120 comprises a body 121 that holds a store of business card sized print media . a printer module 10 locates into socket 122 on the dispenser module 120 . when correctly aligned , a card dispensed from the dispenser module by slider 123 enters slot 13 and is printed . in the sense that a minimum configuration compact printer system must be able to print out photos , a minimum compact printer configuration contains at least a printer module 10 . the printer module holds a single photographic image that can be printed out via its memjet printer . it also contains the 3v battery required to power the compact printer system . in this minimum configuration , the user is only able to print out photos . each time a user inserts a business card 130 into the slot in the printer module , the image in the printer module is printed onto the card . the same image is printed each time a business card is inserted into the printer . in this minimum configuration there is no way for a user to change the image that is printed . the dispenser module 120 can be used to feed cards 130 into the printer module with a minimum of fuss , as shown in fig1 . by connecting a camera module 20 to the minimum configuration compact printer system the user now has an instant printing digital camera in a pen , as shown in fig1 . the camera module 20 provides the mechanism for capturing images and the printer module 10 provides the mechanism for printing them out . the battery in the printer module provides power for both the camera and the printer . when the user presses the “ take ” button 27 on the camera module 20 , the image is captured by the camera 24 and transferred to the printer module 10 . each time a business card is inserted into the printer the captured image is printed out . if the user presses “ take ” on the camera module again , the old image in the printer module is replaced by the new image . if the camera module is subsequently detached from the compact printer system , the captured image remains in the printer module , and can be printed out as many times as desired . the camera module is simply there to capture images to be placed in the printer module . fig1 shows a further configuration in which a memory module 30 is connected to the configuration of fig1 . in the embodiment of fig1 , the user has the ability to transfer images between the printer module 10 and a storage area contained in the memory module 30 . the user selects the image number on the memory module , and then either sends that image to the printer module ( replacing whatever image was already stored there ), or brings the current image from the printer module to the specified image number in the memory module . the memory module also provides a way of sending sets of thumbnail images to the printer module . multiple memory modules can be included in a given system , extending the number of images that can be stored . a given memory module can be disconnected from one compact printer system and connected to another for subsequent image printing . with the camera module 20 attached to a memory module / printer module compact printer system , as shown in fig1 , the user can “ take ” an image with the camera module , then transfer it to the specified image number in the memory module . the captured images can then be printed out in any order . by connecting a communications module 40 to the minimum configuration compact printer system , the user gains the ability to transfer images between a pc and the compact printer system . fig1 shows the configuration of fig1 with the addition of a communications module 40 . the communications module makes the printer module 10 and any memory modules 30 visible to an external computer system . this allows the download or uploading of images . the communications module also allows computer control of any connected compact printer modules , such as the camera module 20 . in the general case , the printer module holds the “ current ” image , and the other modules function with respect to this central repository of the current image . the printer module is therefore the central location for image interchange in the compact printer system , and the printer module provides a service to other modules as specified by user interaction . a given module may act as an image source . it therefore has the ability to transfer an image to the printer module . a different module may act as an image store . it therefore has the ability to read the image from the printer module . some modules act as both image store and image source . these modules can both read images from and write images to the printer module &# 39 ; s current image . the standard image type has a single conceptual definition . the image definition is derived from the physical attributes of the printhead used in the printer module . the printhead is 2 inches wide and prints at 1600 dpi in cyan , magenta and yellow bi - level dots . consequently a printed image from the compact printer system is 3200 bi - level dots wide . the compact printer system prints on business card sized pages ( 85 mm × 55 mm ). since the printhead is 2 inches wide , the business cards are printed such that 1 line of dots is 2 inches . 2 inches is 50 . 8 mm , leaving a 2 mm edge on a standard business - card sized page . the length of the image is derived from the same card size with a 2 mm edge . consequently the printed image length is 81 mm , which equals 5100 1600 dpi dots . the printed area of a page is therefore 81 mm × 51 mm , or 5100 × 3200 dots . to obtain an integral contone to bi - level ratio a contone resolution of 267 ppi ( pixels per inch ) is chosen . this yields a contone cmy page size of 850 × 534 , and a contone to bi - level ratio of 1 : 6 in each dimension . this ratio of 1 : 6 provides no perceived loss of quality since the output image is bi - level . the printhead prints dots in cyan , magenta , and yellow ink . the final output to the printed page must therefore be in the gamut of the printhead and take the attributes of the inks into account . it would at first seem reasonable to use the cmy color space to represent images . however , the printer &# 39 ; s cmy color space does not have a linear response . this is definitely true of pigmented inks , and partially true for dye - based inks . the individual color profile of a particular device ( input and output ) can vary considerably . image capture devices ( such as digital cameras ) typically work in rgb ( red green blue ) color space , and each sensor will have its own color response characteristics . consequently , to allow for accurate conversion , as well as to allow for future image sensors , inks , and printers , the cie l * a * b * color model [ cie , 1986 , cie 15 . 2 colorimetry : technical report ( 2 nd edition ), commission internationale de l &# 39 ; eclairage ] is used for the compact printer system . l * a * b * is well defined , perceptually linear , and is a superset of other traditional color spaces ( such as cmy , rgb , and hsv ). the printer module must therefore be capable of converting l * a * b * images to the particular peculiarities of its cmy color space . however , since the compact printer system allows for connectivity to pcs , it is quite reasonable to also allow highly accurate color matching between screen and printer to be performed on the pc . however the printer driver or pc program must output l * a * b *. each pixel of a compact printer image is therefore represented by 24 bits : 8 bits each of l *, a *, and b *. the total image size is therefore 1 , 361 , 700 bytes ( 850 × 534 × 3 ). each image processing module is able to access the image stored in the printer module . the access is either to read the image from the printer module , or to write a new image to the printer module . the communications protocol for image access to the printer module provides a choice of internal image organization . images can be accessed either as 850 × 534 or as 534 × 850 . they can also be accessed in interleaved or planar format . when accessed as interleaved , each pixel in the image is read or written as 24 bits : 8 bits each of l *, a *, b *. when accessed as planar , each of the color planes can be read or written independently . the entire image of l * pixels , a * pixels or b * pixels can be read or written at a time . to provide the required control functions and image processing the print module 10 includes an application specific integrated circuit configured as a printer controller . a block schematic of the controller is shown in fig1 . each element of the controller is described in detail below together with examples of operation of the elements . the controller is designed to be fabricated using a 0 . 25 micron cmos process , with approximately 9 million transistors , almost half of which are flash memory or static ram . this leads to an estimated area of 16 mm 2 . the controller contains : program storage memory , which is suitably 8 kbytes of flash memory ; the controller may also include a number of housekeeping and administration elements including ; the controller is intended to run at a clock speed of approximately 48 mhz on 3v externally and 1 . 5v internally to minimize power consumption . the actual operating frequency will be an integer multiple of the serial bus operating frequency . the cpu is intended to be a simple micro - controller style cpu , running at about 1 mhz , and can be a vendor supplied core . referring to fig1 the controller 170 incorporates a simple micro - controller cpu core 171 to synchronize the image capture and printing image processing chains and to perform general operating system duties including the user - interface . a wide variety of cpu cores are suitable , it can be any processor core with sufficient processing power to perform the required calculations and control functions fast enough to meet consumer expectations . since all of the image processing is performed by dedicated hardware , the cpu does not have to process pixels . as a result , the cpu can be extremely simple . however it must be fast enough to run a stepper motor to advance the card during a print ( the stepper motor requires a 5 khz process ). an example of a suitable core is a philips 8051 micro - controller running at about 1 mhz . associated with the cpu core 171 is a program rom 172 and a small program scratch ram 173 . the cpu 171 communicates with the other units within the controller via memory - mapped i / o supported by a memory decoder 174 . particular address ranges map to particular units , and within each range , to particular registers within that particular unit . this includes the serial and parallel interfaces . the cpu memory decoder 174 is a simple decoder for satisfying cpu data accesses . the decoder translates data addresses into internal controller register accesses over the internal low speed bus 175 , and therefore allows for memory mapped i / o of controller registers . the bus 175 includes address lines 175 a and data or control lines 175 b . the small program flash rom 172 is incorporated into the controller to store simple sequences for controlling the stepper motor and other functions ( expanded below ). the rom size depends on the cpu chosen , but should not be more than 8 kbytes . likewise , a small scratch ram 173 is incorporated into the controller for , primarily , program variable storage . since the program code does not have to manipulate images , there is no need for a large scratch area . the ram size depends on the cpu chosen ( e . g . stack mechanisms , subroutine calling conventions , register sizes etc . ), but should not be more than about 2 kbytes the optional serial bus interface 176 , is connected to the internal chip low - speed bus 175 . the serial bus is controlled by the cpu 171 and preferably follows the usb protocol , although other protocols may be suitable . the serial bus is described in a co - pending application referred to above . the serial bus interface 176 allows the transfer of images to and from the printer module 10 , by external control from the camera module 20 , memory module 30 , effects module 80 , other modules or a computer . for example , the memory module 30 sends and receives images using the usb protocol on the serial bus . the parallel interface 177 connects the controller to individual static electrical signals . the cpu 171 is able to control each of these connections as memory - mapped i / o via the low - speed bus 175 . the following table shows the connections to the parallel interface . connections to parallel interface connection direction pins paper transport stepper motor out 4 nozzle capping solenoid ( optional ) out 1 buttons in 2 as indicated in the table , the parallel interface 177 provides communication to a stepper motor 187 in the printer module 10 and can receive signals from buttons 188 ( such as a paper sensor to detect the presence of printable media in the printer module ). there are two optional low - speed serial interfaces 178 , 179 connected to the internal low - speed bus 175 . a first interface 178 connects to a qa chip 189 in the ink cartridge of the printer module 10 . the second interface connects to a qa chip 190 on the print module 10 . the reason for having two interfaces is to connect to both the on - module qa chip 190 and to the ink cartridge qa chip 189 using separate lines . the two qa chips are implemented as authentication chips . if only a single line is used , a clone ink cartridge manufacturer could usurp the authentication mechanism and provide a non - proprietary cartridge . a cpu - mediated protocol between the two qa chips is used to authenticate the ink cartridge . the controller can then retrieve ink characteristics from the ink cartridge qa chip , as well as the remaining volume of each color ink . the controller uses the ink characteristics to properly configure the printhead 186 . it uses the remaining ink volumes , updated on a page - by - page basis with ink consumption information accumulated by the printhead interface 180 , to ensure that it never allows the printhead to be damaged by running dry . the image storage memory 181 is used to store the current print image . it is suitably multi - level flash ram ( 2 - bits per cell ) so that the image is retained after the power has been shut off . it is referred to as imageram for convenience . the image held in imageram is kept in an interleaved format ( the color components for a given pixel are stored together ). images are stored in one of two formats : either as cmy or l * a * b *, with each image represented by 850 lines containing 534 sets of 3 8 - bit color samples each . the total amount of memory required for the interleaved linear cmy / l * a * b * image is 1 , 361 , 700 bytes ( approximately 1 . 3 mb ). the image is written to imageram by the image access unit 182 , and read by both the image access unit 182 and the print generator unit 193 of the printhead interface 180 . the cpu does not have direct random access to this image memory . it must access the image pixels via the image access unit 182 . the image access unit ( iau ) 182 is the means for the controller to access the image in imageram 181 . the controller can read pixels from the image in the image storage memory and write pixels back . the iau allows planar and interleaved access . it also allows for 90 degrees rotation . pixels are read by the controller when the image is to be transferred to another module . pixels are written by the controller when the image is being loaded from another module . the registers of the iau allow pixel transfers to be planar , interleaved or rotated by 90 degrees as desired . the image access unit 182 is a straightforward access mechanism to imageram 181 , and operates via the register set as shown in the following table . iau registers name bits description imageaddress 21 address to read or write in imageram delta12 12 amount to add to imageaddress when stepping from one pixel to the next in reads / writes for the first 2 of each set of 3 . delta3 12 amount to add to imageaddress when stepping from one pixel to the next in reads / writes during the 3rd access of each set of 3 . mode 3 0 = read from imageaddress into value . 1 = write value to imageaddress . value 8 value stored at imageaddress ( if mode = read ) value to store at imageaddress ( if mode = write ) the data is read from or written to the appropriate address in image ram whenever the value register is read from or written to , according to the sense of mode . interleaved / planar and rotated access is accomplished via the two delta registers . the values are set as shown in the following table . register settings for different image access modes image read or image access type written as address delta12 delta3 interleaved 850 rows × 534 pixels 0 1 1 ( each pixel 3 colors ) 534 rows × 850 pixels 0 1 1600 a planar - plane n 850 rows × 534 pixels n 3 3 ( each pixel 1 color ) 534 rows × 850 pixels n 1602 b 1602 a 534 × 3 - 2 b 534 × 2 the controller 170 may also include a clock phase - locked loop 184 that provides timing signals to the controller . the clock 184 draws a base signal from crystal oscillator 185 . some cpu include a clock so the clock 184 and crystal 185 would not be required . a standard jtag ( joint test action group ) interface 183 is included in the controller for testing purposes . due to the complexity of the controller , a variety of testing techniques are required , including bist ( built in self test ) and functional block isolation . an overhead of 10 % in chip area is assumed for overall chip testing circuitry . the printhead interface ( phi ) 180 is the means by which the controller loads the printhead 186 with the dots to be printed , and controls the actual dot printing process . the following description describes one implementation of a method of converting the image stored in imageram to image printed on a card . the printhead interface 180 is a wrapper for a number of units as shown in fig1 , including : a memjet interface ( mji ) 191 , which transfers data to the memjet printhead 186 , and controls the nozzle firing sequences during a print ; a pair of line synchronization generator units ( lsgu ) 192 , which provide synchronization signals for the mji 191 and the stepper motors 187 ; and a print generator unit ( pgu ) 193 which takes an image from the imageram 181 ( in l * a * b * or cmy ) and produces a 1600 dpi dithered cmy image in real time as required by the memjet interface 191 . in addition , the pgu has a test pattern mode , which enables the cpu 171 to specify precisely which nozzles are fired during a print . the units within the phi are controlled by a number of registers that are programmed by the cpu 171 . in the phi 180 there are two lsgus 192 . the first lsgu 192 a produces linesync 0 , which is used to control the memjet interface 191 . the second lsgu 192 b produces linesync 1 which is used to pulse the paper drive stepper motor 187 . the linesyncgen units 192 are responsible for generating the synchronization pulses required for printing a page . each lsgu produces an external linesync signal to enable line synchronization . the generator inside the lgsu generates a linesync pulse when told to ‘ go ’, and then every so many cycles until told to stop . the linesync pulse defines the start of the next line . the exact number of cycles between linesync pulses is determined by the cyclesbetweenpulses register , one per generator . it must be at least long enough to allow one line to print ( 200 ms for the low speed printing ) and another line to load , but can be longer as desired ( for example , to accommodate special requirements of paper transport circuitry ). if the cyclesbetweenpulses register is set to a number less than a line print time , the page will not print properly since each linesync pulse will arrive before the particular line has finished printing . linesyncgen unit registers register name description cyclesbetweenpulses the number of cycles to wait between generating one linesync pulse and the next . go controls whether the lsgu is currently generating linesync pulses or not . a write of 1 to this register generates a linesync pulse , transfers cyclesbetweenpulses to cyclesremaining , and starts the countdown . when cyclesremaining hits 0 , another linesync pulse is generated , cyclesbetweenpulses is transferred to cyclesremaining and the countdown is started again . a write of 0 to this register stops the countdown and no more linesync pulses are generated . cyclesremaining a status register containing the number of cycles remaining until the next linesync pulse is generated . the memjet interface ( mji ) 191 connects the controller 170 to the memjet printhead 186 , providing both data and appropriate signals to control the nozzle loading and firing sequences during a print . the memjet interface 191 is a state machine which follows the printhead loading and firing order described , and includes the functionality of a preheat cycle and a cleaning cycle . the mji 191 loads data into the printhead from a choice of two data sources : all 1s . this means that all nozzles will fire during a subsequent print cycle , and is the standard mechanism for loading the printhead for a preheat or cleaning cycle ; from a 12 - bit input held in a transfer register of the pgu 193 . this is the standard means of printing an image , whether it is a photo or test pattern . the 12 - bit value from the pgu is directly sent to the printhead and a 1 - bit ‘ advance ’ control pulse is sent to the pgu . the mji 191 knows how many lines it has to print for the page . when the mji is told to ‘ go ’, it waits for a linesync pulse before it starts the first line . once it has finished loading / printing a line , it waits until the next linesync pulse before starting the next line . the mji stops once the specified number of lines has been loaded and / or printed , and ignores any further linesync pulses . the mji is started after the pgu has already prepared the first 12 - bit transfer value . this is so the 12 - bit data input will be valid for the first transfer to the printhead . the mji is therefore directly connected to the pgu , linesync 0 , and the external memjet printhead . the following table shows the connections between the mji 191 and the memjet printhead 186 . printhead connections name # pins i / o description chromapodselect 4 0 select which chromapod will fire ( 0 - 9 ) nozzleselect 4 0 select which nozzle from the pod will fire ( 0 - 9 ) aenable 1 0 firing pulse for phasegroup a benable 1 0 firing pulse for phasegroup b cdatain [ 0 - 3 ] 4 0 cyan output to cyan shift register of segments 0 - 3 mdatain [ 0 - 3 ] 4 0 magenta input to magenta shift register of segments 0 - 3 ydatain [ 0 - 3 ] 4 0 yellow input to yellow shift register of segments 0 - 3 srclock 1 0 a pulse on srclock ( shiftregisterclock ) loads the current values from cdatain [ 0 - 3 ], mdatain [ 0 - 3 ] and ydatain [ 0 - 3 ] into the 12 shift registers of the printhead ptransfer 1 0 parallel transfer of data from the shift registers to the printhead &# 39 ; s internal nozzleenable bits ( one per nozzle ). sensesegselect 1 0 a pulse on sensesegselect anded with data on cdatain [ n ] selects the sense lines for segment n . tsense 1 i temperature sense vsense 1 i voltage sense rsense 1 i resistivity sense wsense 1 i width sense the duration of firing pulses on the aenable and benable lines depend on the viscosity of the ink ( which is dependent on temperature and ink characteristics ) and the amount of power available to the printhead . the typical pulse duration range is 1 . 3 to 1 . 8 ms . the mji therefore contains a programmable pulse duration table , indexed by feedback from the printhead . the table of pulse durations allows the use of a lower cost power supply , and aids in maintaining more accurate drop ejection . the pulse duration table has 256 entries , and is indexed by the current vsense and tsense settings . the upper 4 - bits of address come from vsense , and the lower 4 - bits of address come from tsense . each entry is 8 bits , and represents a fixed point value in the range of 0 - 4 ms . the 256 - byte table is written by the cpu 171 before printing the image . each 8 - bit pulse duration entry in the table combines : viscosity curve of ink ( from the ink cartridge qa chip 189 ) the mji maintains a count of the number of dots of each color fired from the printhead . the dot count for each color is a 24 - bit value , individually cleared under processor control . each dot count can hold a maximum coverage dot count of a single 3 - inch print , so in typical usage , the dot count will be read and cleared after each print . the dot counts are used by the cpu to update the qa chip in order to predict when the ink cartridge will run out of ink . the processor knows the volume of ink in the cartridge for each of c , m , and y from the qa chip . counting the number of drops eliminates the need for ink sensors , and prevents the ink channels from running dry . an updated drop count is written to the qa chip after each print . a new image will not be printed unless there is enough ink left , and allows the user to change the ink without getting a dud photo that must be reprinted . the cpu communicates with the mji via a register set . the registers allow the cpu to parameterize a print as well as receive feedback about print progress . the following registers are contained in the mji : memjet interface registers register name description print parameters numtransfers the number of transfers required to load the printhead ( usually 800 ). this is the number of pulses on the srclock and the number of 12 - bit data values to transfer for a given line . numlines the number of load / print cycles to perform . monitoring the print status the memjet interface &# 39 ; s status register linesremaining the number of lines remaining to be printed . only valid while go = 1 . starting value is numlines and counts down to 0 . transfersremaining the number of transfers remaining before the printhead is considered loaded for the current line . only valid while go = 1 . starting value is numtransfers and counts down to 0 . sensesegment the 4 - bit value to place on the cyan data lines during a subsequent feedback sensesegselect pulse . only 1 of the 4 bits should be set , corresponding to one of the 4 segments . setallnozzles if non - zero , the 12 - bit value written to the printhead during the loaddots process is all 1s , so that all nozzles will be fired during the subsequent printdots process . this is used during the preheat and cleaning cycles . if 0 , the 12 - bit value written to the printhead comes from the print generator unit . this is the case during the actual printing of a photo or test images . actions reset a write to this register resets the m . h , stops any loading or printing processes , and loads all registers with 0 . sensesegselect a write to this register with any value clears the feedbackvalid bit of the status register , and the remaining action depends on the values in the loadingdots and printingdots status bits . if either of the status bits are set , the feedback bit is cleared and nothing more is done . if both status bits are clear , a pulse is given simultaneously on the sensesegselect line with all cyan data bits 0 . this stops any existing feedback . a pulse is then given on sensesegselect with the cyan data bits set according to the sensesegment register . once the various sense lines have been tested , the values are placed in the tsense , vsense , rsense , and wsense registers , and the feedback bit of the status register is set . go a write of 1 to this bit starts the loaddots / printdots cycles , which commences with a wait for the first linesync pulse . a total of numlines lines are printed , each line being loadedlprinted after the receipt of a linesync pulse . the loading of each line consists of numtransfers 12 - bit transfers . as each line is printed , linesremaining decrements , and transfersremaining is reloaded with numtransfers again . the status register contains print status information . upon completion of numlines , the loading / printing process stops , the go bit is cleared , and any further linesync pulses are ignored . during the final print cycle , nothing is loaded into the printhead . a write of 0 to this bit stops the print process , but does not clear any other registers . clearcounts a write to this register clears the cdotcount , mdotcount , and ydotcount , registers if bits 0 , 1 , or 2 respectively are set . consequently a write of 0 has no effect . feedback tsense read only feedback of tsense from the last sensesegselect pulse sent to segment sensesegment . is only valid if the feedback valid bit of the status register is set . vsense read only feedback of vsense from the last sensesegselect pulse sent to segment sensesegment . is only valid if the feedback valid bit of the status register is set . rsense read only feedback of rsense from the last sensesegselect pulse sent to segment sensesegment . is only valid if the feedbackvalid bit of the status register is set . wsense read only feedback of wsense from the last sensesegselect pulse sent to segment sensesegment . is only valid if the feedback valid bit of the status register is set . cdotcount read only 24 - bit count of cyan dots sent to the printhead . mdotcount read only 24 - bit count of magenta dots sent to the printhead . ydotcount read only 24 - bit count of yellow dots sent to the printhead . the mji &# 39 ; s status register is a 16 - bit register with bit interpretations as follows : mji status register name bits description loadingdots 1 if set , the mji is currently loading dots , with the number of dots remaining to be transferred in transfersremaining . if clear , the mji is not currently loading dots printingdots 1 if set , the mji is currently printing dots . if clear , the mji is not currently printing dots . printinga 1 this bit is set while there is a pulse on the aenable line printingb 1 this bit is set while there is a pulse on the benable line feedbackvalid 1 this bit is set while the feedback values tsense , vsense , rsense , and wsense are valid reserved 3 — printingchromapod 4 this holds the current chromapod being fired while the printingdots status bit is set . printingnozzles 4 this holds the current nozzle being fired while the printingdots status bit is set . the following pseudocode illustrates the logic required to load a printhead for a single line . note that loading commences only after the linesync pulse arrives . this is to ensure the data for the line has been prepared by the pgu and is valid for the first transfer to the printhead . wait for linesync for transfersremaining = numtransfers to 0 if ( setallnozzles ) set all colordata lines to be 1 else place 12 bit input on 12 colordata lines endif pulse srclock wait 12 cycles send advance signal endfor the cleaning and preheat cycles are accomplished by setting appropriate registers in the mji : set the pulseduration register to either a low duration ( in the case of the preheat mode ) or to an appropriate drop ejection duration for cleaning mode . set numlines to be the number of times the nozzles should be fired set the go bit and then wait for the go bit to be cleared when the print cycles have completed . the lsgu must also be programmed to send linesync pulses at the correct frequency . from the simplest point of view , the pgu 193 provides the interface between the image ram 181 and the memjet interface 191 . the elements of the pgu are shown schematically in fig1 . two image processing chains are evident . the first , the test pattern mode , simply reads data directly from image ram 181 , and formats in test pattern access unit ( tpau ) 194 into output buffer 195 ready for output to the mji 191 . the second print chain contains the majority of functions required for printing an image . a conversion processor 196 converts l * a * b * format images to cmy format and stores the result in contone buffer 197 . an up - interpolate , halftone and reformat for printer unit ( uhru ) 198 massages the content of contone buffer 197 for the output buffer 195 , and hance the memjet interface 191 . the pgu takes as input a variety of parameters , including l * a * b * to cmy conversion tables and printing timing parameters . the conversion processor 196 and the uhru unit 198 run in parallel . the buffer sizes are shown in the following table . buffer sizes for print generator unit buffer size ( bytes ) composition of buffer buffer 1 5 3 × 12 bits buffer 2 9 , 612 3 colors ( cmy ) × 6 lines × 534 contone pixels @ 8 - bits each apart from a number of registers , some of the processes have significant lookup tables or memory components . these are summarized in the following table . memory requirements within pgu processes size composition unit ( bytes ) of requirements test pattern access 0 convert l * a * b * to cmy 14 , 739 3 conversion tables , each 17 × 17 × 17 × 8 - bits upinterpolate / halftone / 2 , 500 dither cell , 50 × 50 × 8 - bits reformat the output buffer 195 holds the generated dots from the print generation process . it consists of a 12 - bit shift register to hold dots generated one at a time from the uhru 197 , three 4 - bit registers to hold the data generated from the tpau 194 , and a 12 - bit register used as the buffer for data transfer to the mji 191 . a pulse on either the advance line from the mji , or the transferwriteenable from both the tpau and the uhru , loads the 12 - bit transfer register with all 12 - bits , either from the three 4 - bit registers or the single 12 - bit shift register . the output buffer 195 therefore acts as a double buffering mechanism for the generated dots . the contone buffer 197 holds six lines of the calculated cmy contone image . the contone buffer is generated by the conversion processor 196 , and is accessed by the uhru 198 in order to generate output dots for the printer . the size of the contone buffer is dependent on the physical distance between the nozzles on the printhead . as dots for one color are being generated for one physical line , dots for a different color on a different line are being generated . the net effect is that six different physical lines are printed at the one time from the printer — odd and even dots from different output lines , and different lines per color . since the ratio of 534 - res lines to 1600 dpi lines is 1 : 6 , each contone pixel is sampled six times in each dimension . for the purposes of buffer lines , we are only concerned with 1 dimension , so only consider 6 dot lines coming from a single pixel line . the distance between nozzles of different colors is 4 - 8 dots ( depending on memjet parameters ). we therefore assume 8 , which gives a separation distance of 16 dots , or 17 dots in inclusive distance . the worst case scenario is that the 17 dot lines includes the last dot line from a given pixel line . this implies 5 pixel lines , with dot lines generated as 1 , 5 , 5 , 5 , 1 , and allows an increase of nozzle separation to 10 . to ensure that the contone generation process writing to the buffer does not interfere with the dot generation process reading from the buffer , we add an extra line per color , for a total of six lines per color . the contone buffer is therefore three colors of six lines , each line containing 534 8 - bit contone values . the total memory required is 3 × 6 × 534 = 9 , 612 bytes ( 9 . 5 kbytes ). the memory only requires a single 8 - bit read per cycle , and a single 8 - bit write every 36 cycles ( each contone pixel is read 36 times ). the contone buffer can be implemented as single cycle double access ( read and write ) ram running at the nominal speed of the printhead dot generation process . the contone buffer is set to white ( all 0 ) before the start of the print process . the test pattern access process is the means by which test patterns are produced . under normal user circumstances , this process will not be used . it is primarily for diagnostic purposes and is not described in detail . persons skilled in the art will be aware of suitable processes for producing test patterns . the operation of the conversion processor 196 to convert from l * a * b * to cmy is described in a co - pending application titled color conversion method for compact printer system . the conversion is optional since the input data may already be in cmy format . in the latter case the data is simply passed through with no change . the conversion is performed as tri - linear interpolation . three 17 × 17 × 17 lookup tables are used for the conversion process : l * a * b * to cyan , l * a * b * to magenta , and l * a * b * to yellow . however , since there are 36 cycles to perform each tri - linear interpolation , there is no need for a fast tri - linear interpolation unit . instead , 8 calls to a linear interpolation process is more than adequate . the input to the up - interpolate , halftone and reformat unit ( uhru ) is the contone buffer 197 containing the partial cmy image . the output is a set of 12 - bit values in the correct order to be sent to the memjet interface for subsequent output to the printhead via output buffer 195 . the 12 output bits are generated 1 bit at a time , and sent to the 12 - bit shift register in the output buffer . the control of this process occurs from the advance signal from the mji and the linesync0 pulse from the lsgu . when the uhru starts up , and after each linesync0 pulse , 12 bits are produced , and are clocked into the 12 - bit shift register of output buffer 195 . after the 12th bit has been clocked in , a transferwriteenable pulse is given to the output buffer and the next 12 bits are generated . after this , the uhru waits for the advance pulse from the mji . when the advance pulse arrives , the transferwriteenable pulse is given to the output buffer , and the next 12 bits are calculated before waiting again . in practice , once the first advance pulse is given , synchronization has occurred and future advance pulses will occur every 12 cycles thereafter . the upinterpolate , halftone and reformat process is shown schematically in fig2 . the 534 × 850 cmy image is up - interpolated to the final print resolution ( 3200 × 5100 ). the ratio is 1 : 6 in both dimensions . although it is certainly possible to bi - linearly interpolate the 36 values ( 1 : 6 in both x and y dimensions ), the resultant values will not be printed contone . the results will be dithered and printed bi - level . given that the contone 1600 dpi results will be converted into dithered bi - level dots , the accuracy of bi - linear interpolation from 267 dpi to 1600 dpi will not be visible ( the image resolution was chosen for this very reason ). pixel replication will therefore produce good results . pixel replication involves taking a single pixel , and using it as the value for a larger area . in this case , a single pixel is replicated to 36 pixels ( a 6 × 6 block ). if each pixel were contone , the result may appear blocky , but since the pixels are to be dithered , the effect is that the 36 resultant bi - level dots take on the contone value . the printhead is only capable of printing dots in a bi - level fashion . it is therefore necessary to convert from the contone cmy to a dithered cmy image . more specifically , a dispersed dot ordered dither is produce using a stochastic dither cell 200 , converting a contone cmy image into a dithered bi - level cmy image . the 8 - bit 1600 dpi contone value is compared in unsigned comparator 199 to the current position in the dither cell . if the 8 - bit contone value is greater than the dither cell value , an output bit of 1 is generated . otherwise an output bit of 0 is generated . this output bit will eventually be sent to the printhead and control a single nozzle to produce a single c , m , or y dot . the bit represents whether or not a particular nozzle will fire for a given color and position . the same position in the dither cell can be used for c , m , and y . this is because the actual printhead produces the c , m , and y dots for different lines in the same print cycle . the staggering of the different colored dots effectively gives staggering in the dither cell . the size of the dither cell depends on the resolution of the output dots . since 1600 dpi dots are produced , the cell size should be larger than 32 × 32 . in addition , to allow the dot processing order to match the printhead segments , the size of the dither cell should ideally divide evenly into 800 ( since there are 800 dots in each segment of the printhead ). a dither cell size of 50 × 50 is large enough to produce high quality results , and divides evenly into 800 ( 16 times ). each entry of the dither cell is 8 bits , for a total of 2500 bytes ( approximately 2 . 5 kb ). the final process before being sent to the printer is for the dots to be formatted into the correct order for being sent to the printhead . the dots must be sent to the printhead in the correct order — 12 dots at a time for a 2 inch printhead . the dots are produced in the correct order for printing by the up - interpolate and dither functions . those dot values ( each value is 1 bit ) can simply be collected , and sent off in groups of 12 . the 12 bit groups can then be sent to the printhead by the memjet interface 191 . in order to halftone 9 , 600 contone pixels , 9 , 600 contone pixels must be read in . the address generator unit 201 performs this task , generating the addresses into the contone buffer , which effectively implements the upinterpolate task . the address generator unit also performs the reformatting task , as described above , and the addressing for the staggered dither cell 200 . the printhead interface 180 therefore performs the bulk of the image formatting tasks . the image stored in the image storage memory 181 is translated by the printhead interface 180 into a suitable format to drive the nozzles in the memjet printhead 186 . the cpu 171 is responsible for housekeeping and administration tasks to operate the printer module 10 , but not the image formatting tasks . throughout the specification the aim has been to describe the preferred embodiments of the invention without limiting the invention to any one embodiment or specific collection of features . persons skilled in the relevant art may realize variations from the specific embodiments that will nonetheless fall within the scope of the invention .