(57)【要約】  ソースメモリのソース配列内に格納されたビットマップによって表される内容を商品に標識するための方法に、宛先メモリ内の宛先配列を特定することが含まれる。前記宛先配列は、前記宛先メモリの第１のデータチャンクの境界と一致する境界を有する第１の領域と、前記宛先メモリの第２のデータチャンクの境界と一致する境界を有する第２の領域とを有し、前記第２のデータチャンクは前記第１のデータチャンクよりも小さい。前記ソース配列の第１の領域が、前記第１のデータチャンクの単位で前記宛先配列の前記第１の領域上にコピーされ、前記ソース配列の第２の領域が、前記第２のデータチャンクの単位で前記宛先配列の前記第２の領域上にコピーされる。
2008514523.tif 000002
【特許請求の範囲】
【請求項１】
ソースメモリのソース配列内に格納されたビットマップによって表される内容を商品に標識するための、以下のステップを含む方法：
宛先メモリ内で、
前記宛先メモリの第１のデータチャンクの境界と一致する境界を有する第１の領域と；
前記宛先メモリの第２のデータチャンクの境界と一致する境界を有する第２の領域であって、前記第１のデータチャンクが前記第２のデータチャンクよりも大きい、第２の領域と；
を有する宛先配列を特定するステップと；
前記ソース配列の第１の領域を、前記第１のデータチャンクの単位で前記宛先配列の前記第１の領域上にコピーするステップと；
前記ソース配列の第２の領域を、前記第２のデータチャンクの単位で前記宛先配列の前記第２の領域上にコピーするステップ。
【請求項２】
前記宛先配列によって表される内容を商品に標識するための標識装置に前記宛先配列を供給するステップを更に含む、請求項１に記載の方法。
【請求項３】
前記第１のデータチャンクをバイトとして選択することと、前記第２のデータチャンクをビットとして選択することとを更に含む、請求項１に記載の方法。
【請求項４】
前記第１のデータチャンクをワードとして選択することと、前記第２のデータチャンクをバイトとして選択することとを更に含む、請求項１に記載の方法。
【請求項５】
前記第１のデータチャンクをロングワードとして選択することと、前記第２のデータチャンクをワードとして選択することとを更に含む、請求項１に記載の方法。
【請求項６】
前記ソース配列の第３の領域を規定するステップであって、前記第３の領域が前記宛先メモリの第３のデータチャンク境界と一致する境界を有し、前記第３のデータチャンクが前記第２のデータチャンクよりも小さい、ステップと；
前記ソース配列の前記第３の領域を、前記第３のデータチャンクの単位で前記宛先配列の第３の領域上にコピーするステップと；
を更に含む、請求項１に記載の方法。
【請求項７】
前記第１のデータチャンクをワードとして選択することと、前記第２のデータチャンクをバイトとして選択することと、前記第３のデータチャンクをビットとして選択することとを更に含む、請求項６に記載の方法。
【請求項８】
前記ソース配列の第１の領域をコピーすることに、整数個の第１のデータチャンクを前記ソースビットマップの選択された行からコピーすることが含まれる、請求項１に記載の方法。
【請求項９】
前記ソース配列の第２の部分をコピーすることに、第２のデータチャンクを前記ソース配列の選択された行からコピーすることが含まれる、請求項８に記載の方法。
【請求項１０】
前記ビットマップが前記ソース配列に格納されている方向とは異なる方向で、前記ビットマップが前記宛先配列に格納されるように、前記宛先配列の前記第１及び第２の領域を選択することが更に含まれる、請求項１に記載の方法。
【請求項１１】
前記ビットマップが前記ソース配列に格納されている方向に対して直角に回転された方向で前記ビットマップが前記宛先配列に格納されるように、前記宛先配列の前記第１及び第２の領域を選択することが更に含まれる、請求項１に記載の方法。
【請求項１２】
前記ソース配列の第１の領域を前記宛先配列の前記第１の領域上にコピーすることに、前記第１の領域を、前記第１のデータチャンクのエクステントの整数倍の長さ及び幅を有する二次元ブロックの単位でコピーすることが含まれる、請求項１に記載の方法。
【請求項１３】
ソースメモリのソース配列内に格納されたビットマップによって表される内容を商品に標識するためのソフトウェアがその上にコード化されたコンピュータ読み取り可能な媒体であって、コンピュータによって実行されると前記コンピュータに請求項１に記載の方法を実行させる命令を前記ソフトウェアが有する、コンピュータ読み取り可能な媒体。
【請求項１４】
商品を標識するための、以下を備えた装置：
ソース配列を格納するためのソースメモリと；
宛先配列を格納するための宛先メモリと；
前記ソースメモリ及び前記宛先メモリとのデータ通信を行うプロセッサと；
前記ソースとのデータ通信を行うコンピュータ読み取り可能な媒体であって、前記ソース配列内に格納されたビットマップによって表される内容を前記商品に標識するためのソフトウェアが前記媒体上にコード化され、コンピュータによって実行されると前記コンピュータに請求項１に記載の方法を実行させる命令を前記ソフトウェアが有する、コンピュータ読み取り可能な媒体。
【請求項１５】
前記宛先メモリとのデータ通信を行うプリンタを更に備えた、請求項１４に記載の装置。
【請求項１６】
物品を標識するための、以下のステップを含む方法：
前記標識を表すデータの第１の部分を、第１のデータチャンクの単位で転送するステップと；
前記データの第２の部分を、第２のデータチャンクの単位で転送するステップと；
前記第１及び第２の部分によって表されるイメージを前記物品に標識するステップ。
【請求項１７】
物品を標識するための、以下のステップを含む方法：
標識の静的な部分を表す静的なデータを設けるステップと；
前記標識の動的な部分を表す動的なデータの第１の部分を、第１のデータチャンクの単位で転送するステップと；
前記動的なデータの第２の部分を、第２のデータチャンクの単位で転送するステップと；
前記静的なデータと前記動的なデータとによって表されるイメージを前記物品に標識するステップ。
【請求項１８】
物品を標識するための、以下のステップを含む方法：
標識装置との通信を行う宛先メモリにデータとして格納されたイメージを物品に標識するステップであって、前記データに静的な部分と動的な部分とが含まれる、ステップと；
前記データの前記動的な部分を更新するステップ。
【請求項１９】
前記データの前記動的な部分を更新するステップに：
前記動的なデータの第１の部分を前記宛先メモリにコピーするステップと；
前記動的なデータの第２の部分を前記宛先メモリにコピーするステップと；
が含まれる、請求項１８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
発明の分野
本発明は、パッケージ標識システム、詳細には動的に変化する情報をパッケージに標識するためのシステムに関する。
【背景技術】
【０００２】
発明の背景
製品は通常、前記製品に関する情報が標識されたパッケージに入っている。そのような情報に、前記パッケージにどのような製品が入っているか、これらの製品がいつ及びどこで製造されたかを特定するデータや、前記パッケージの中身を個別に特定するシリアルな識別情報が含まれる場合がある。この情報は、テキストなどの人間が読めるものである場合もあるし、又はバーコードなどの機械によって読み取り可能なものである場合もある。
【０００３】
標識しなければならないパッケージが大量であることから、情報を前記パッケージ上に直接に、又は前記パッケージに貼り付けられる剥離ラベル上に印刷するコンピュータ制御式の標識装置を設けるのが通例である。前記標識装置は、前記パッケージがその包装に伴って標識されるのに十分な速さで動作することが望ましい。この速度は「ライン速度」と称される。
【０００４】
前記パッケージ上に標識される前記情報が頻繁に変化する場合には、前記標識装置も同様に頻繁に更新される。この更新ステップは、前記標識装置がライン速度で動作し続けられるのに十分な迅速さで行われることが望ましい。
【０００５】
前記標識装置に更新された情報を供給するプロセスには、通常、１つのメモリからデータを取り出し、このデータを前記標識装置に関連したメモリへと転送することが含まれる。このデータ転送は、前記パッケージが前記標識装置に到達する時点までに、前記標識装置が前記パッケージに更新された情報を標識可能となっているように、迅速に行われる必要がある。
【０００６】
発明の概要
一局面においては、本発明には、ソースメモリのソース配列内に記憶されたビットマップによって表される内容を商品に標識するための方法が含まれる。本方法には、宛先メモリ内の宛先配列を特定することが含まれる。前記宛先配列には、前記宛先メモリの第１のデータチャンクの境界と一致する境界を有する第１の領域と、前記宛先メモリの第２のデータチャンクの境界と一致する境界を有する第２の領域とが含まれ、前記第２のデータチャンクは前記第１のデータチャンクよりも小さい。前記ソース配列の第１の領域が、前記第１のデータチャンクの単位で前記宛先配列の前記第１の領域上にコピーされ、前記ソース配列の第２の領域が、前記第２のデータチャンクの単位で前記宛先配列の前記第２の領域上にコピーされる。
【０００７】
幾つかの実施例には、前記宛先配列によって表される内容を物品に標識するために、標識装置に前記宛先配列を供給するステップが更に含まれる。前記第１及び第２のデータチャンクが、それぞれ１バイト及び１ビットであってもよい。或いは、前記第１のデータチャンクが１ワードであり、前記第２のデータチャンクが１バイトであってもよい。又は、前記第１のデータチャンクが１ロングワードであり、前記第２のデータチャンクが１ワードであってもよい。
【０００８】
別の一実施例においては、本方法に、前記ソース配列の第３の領域を規定することが含まれる。前記第３の領域は、前記宛先メモリの第３のデータチャンクの境界と一致する境界を有する。この第３のデータチャンクは、前記第２のデータチャンクよりも小さい。次に、前記ソース配列の第３の領域は、前記第３のデータチャンクの単位で前記宛先配列の第３の領域上にコピーされる。
【０００９】
上述の実施例では、前記第１、第２及び第３のデータチャンクが、それぞれ１ワード、１バイト及び１ビットであってもよい。
【００１０】
別の複数の実施例には、前記ソース配列の第１の領域をコピーすることに、前記ソースビットマップの選択された行から、整数個の第１のデータチャンクをコピーすることが含まれる実施例が含まれる。これらの別の実施例には、前記ソース配列の第２の部分をコピーすることに、前記ソース配列の選択された行から第２のデータチャンクをコピーすることが含まれる実施例が含まれる。
【００１１】
別の複数の実施例には、前記ビットマップの方向が変化する実施例が含まれる。これらの実施例には、前記ビットマップが前記ソース配列内に格納される方向とは異なる方向で前記ビットマップが前記宛先配列内に格納されるように、前記宛先配列の第１及び第２の領域が選択される実施例が含まれる。前記方向の変化が、前記ビットマップが前記ソース配列内に記憶される方向に対する直角の回転によって起こってもよい。前記回転が時計回り方向の回転であってもよいし、反時計回り方向の回転であってもよい。本発明の複数の実施例に、前記ソース配列の第１の領域を前記宛先配列の前記第１の領域上にコピーすることに、前記第１の領域を二次元ブロック単位で前記第１の領域上にコピーすることが含まれる実施例が含まれてもよい。前記ブロックの長さ及び幅は、前記第１のデータチャンクのエクステントの整数倍である。
【００１２】
別の一局面においては、本発明に、ソースメモリのソース配列内に格納されたビットマップによって表される内容を商品に標識するためのソフトウェアがその上にコード化されたコンピュータ読み取り可能な媒体が含まれる。前記ソフトウェアには、コンピュータによって実行されると前記コンピュータに上述の方法のいずれかを実行される命令が含まれる。
【００１３】
本発明の更なる一局面には、商品を標識するための装置が含まれる。そのような装置には、それぞれソース配列及び宛先配列を格納するためのソースメモリ及び宛先メモリが含まれる。プロセッサが前記ソースメモリ及び前記宛先メモリとのデータ通信を行い、プリンタが前記宛先メモリとのデータ通信を行う。前記プロセッサは、前記ソース配列内に格納されたビットマップによって表される内容を商品に標識するためのソフトウェアがその上にコード化されたコンピュータ読み取り可能な媒体とも通信を行う。前記ソフトウェアには、コンピュータによって実行されると前記コンピュータに上述の方法のいずれかを実行させる命令が含まれる。
【００１４】
本発明のその他の特徴及び利点は、以下の詳細な説明と添付の図面とから明らかとなろう。
【００１５】
発明の詳細な説明
図１は、コンベヤベルト１６上の商品１２を標識するためシステム１０を図示したものである。ここで用いられる商品という用語には、商品そのものに加えて、商品の単位を区切るためのあらゆる構造が含まれる。そのような構造の例には、パッケージ、箱、収縮包装、パレット、コンテナ、容器、包みなどが含まれる。
【００１６】
システム１０には、宛先メモリ２２との通信を行うドライバ２０によって制御される製品標識装置１８が含まれる。好適な製品標識装置１８は、インクジェットプリンタ、レーザプリンタ、インパクトプリンタ、サーマルプリンタ又はその他の任意の種類のプリンタなどのプリンタである。標識装置１８が、パッケージ１２を直接に標識するように配置されていてもよい。或いは、標識装置１８がラベルを標識した後に、このラベルが自動で又は手動で剥がされ、パッケージ１２に貼り付けられてもよい。
【００１７】
パッケージ１２が、図１に示すように、コンベヤベルト１６又は類似の構造上の標識装置１８を通過して移動してもよいし、又は、標識装置１８が、静置されたパッケージを通過して移動してもよい。幾つかの用途においては、標識装置１８が手持ち型のプリンタであり、パッケージが自動ではなく手動で標識されてもよい。
【００１８】
宛先メモリ２２には、典型的にはパッケージ１２を識別するために用いられる標識を表すビットマップの形でデータ２３が格納されている。ドライバ２０が宛先メモリ２２からデータを読み出し、このデータ２３を標識装置１８によって実行される命令へと翻訳する。簡略化のために、前記標識を表すデータ２３を標識２３と称する。
【００１９】
典型的な一用途では、標識２３に、あるパッケージ１２と次のパッケージとで同一である静的な部分２４と、パッケージ１２毎に異なる場合もある、頻繁に変化する動的な部分２６とが含まれる。例えば、幾つかの場合では、シリアルな識別情報がパッケージ１２上に印刷される。これらのような場合、標識２３の動的な部分２６に前記シリアルな識別情報が含まれる。
【００２０】
標識２３がベルト１６の稼動中に変化するために、宛先メモリ２２の内容も変化することになる。しかし、多くの用途では、全てのパッケージ１２にわたって同一である標識２３の静的な部分２４は、標識２３の動的な部分２６よりもはるかに大きい。そのような状況下では、次の標識２３のために宛先メモリ２２の全てを書き換えることは非効率的であるので、動的な部分２６のみを書き換える。これらの動的な部分２６は、宛先メモリ２２へと選択的にコピーされて、シリアルな識別情報を形成する。
【００２１】
本システムには、ソースメモリ３０にアクセスするプロセッサ２８も含まれる。ソースメモリ３０には、ここでは「ソース配列３２」と称される、互いにアセンブルされて標識２３の動的な部分２６を形成するメモリセルの配列が複数格納されている。例えば、ソースメモリ３０に複数のメモリセルからなる長方形の配列が複数格納され、これらの配列のそれぞれが英数字を表してもよい。これらは宛先メモリ２２へと選択的にコピーされて、シリアルな識別情報を形成する。
【００２２】
物品１２の標識後に、プロセッサ２８が次の標識２３を作成する。このために、プロセッサ２８は、次の標識２３の動的な部分２６を宛先メモリ２２内でアセンブルする。このことには通常、選択されたソース配列３２を、宛先メモリ２２内の「宛先配列３４」と呼ばれる対応する場所に転送することが含まれる。例えば、前記シリアルな識別情報を次のパッケージ１２向けにインクリメントさせるために、プロセッサ２８は、前記シリアルな識別情報の次の文字を表すデータが含まれる特定のソース配列３２をソースメモリ３０から取り出す。このソース配列３２は、宛先メモリ２２内のある宛先配列３４を置き換えるのに使用される。
【００２３】
次の標識２３の動的な部分２６を作成するこのプロセスは、次の物品１２が標識位置へと移動するのに伴って実行される。スループットを最大化するために、次の標識２３は、物品１２がこれを受け取る位置に配置されるまでに作成されていることが望ましい。従って、標識２３の動的な部分２６が可能な限り効率的に作成されることが重要である。
【００２４】
ソースメモリ３０と宛先メモリ２２とは、双方ともにそれぞれ１ビットが格納された複数のメモリセルの行及び列からなっている。しかし、プロセッサ２８は、一度に１ビットずつにアクセスすることはできない。この理由で、前記ソースメモリと宛先メモリ２２とは双方とも、より大きなデータ単位で編成されている。例えば、一方のメモリのある行の８個の連続したメモリセルが、１バイトを形成する。メモリのある行の一対の連続したバイトが、１ワードを形成する。メモリのある行の一対の連続したワードが、１ロングワードを形成する。本明細書を通し、「データチャンク」という用語は複数のバイト、ワード又はロングワードを総称するものとして用いられる。
【００２５】
文字を指定の位置に印刷するためには、その文字を表すソース配列３２を宛先メモリ２２内の対応する宛先配列３４へとコピーする必要がある。宛先メモリ２２内での宛先配列３４の位置は、前記指定の位置によって決まる。可能な限り柔軟性を持たせるために、宛先配列３４を宛先メモリ２２内のどこに配置してもよい。従って、多くの場合、宛先配列３４内の最初のビット列は、データチャンクの始まりとは一致しない。
【００２６】
幾つかの用途においては、宛先配列３４に何が既に格納されているのかを、その上にソース配列３２の内容を上書きする前に考慮する必要がある。このことは、例えば、宛先配列３４に、ソース配列３２によって表される文字のすき間に表示されることを意図された背景イメージの一部が既に格納されている場合に必要となる。
【００２７】
この問題に対処するために、ソース配列３２内の各ビットと、宛先配列３４内のこれと対応するビットとの間の論理和を求めることができる。しかし、上述のように、プロセッサ２８は通常、一度にメモリの１ビットずつにアクセスすることはできない。その代わりに、プロセッサ２８はソースメモリ３０内の所望のビットが含まれるバイト（又はその他のデータチャンク）を取り出し、目的メモリ内の対応するビットが含まれる別のバイトを取り出し、これら２つのバイトの論理和を求め、この結果を前記目的メモリに書き込む。
【００２８】
目的配列の最初の列がバイト境界から始まることが保証されていれば、最初にソース配列３２の次のバイトを取り出し、この次のバイトと宛先配列３４の対応する次のバイトとの論理和を求めることが可能である。しかし、目的配列の最初の列がバイト境界から始まる保証はない。従って、前述の演算を宛先配列３４内のピクセル毎に繰り返すことが必要となる。
【００２９】
別の標識作成方法では、ソース配列３２から宛先配列３４までのピクセル単位のデータ転送が、前記転送対象のピクセルを表すビットが宛先配列３４内の最初のバイト境界よりも前に来るように実行される。より一般的に述べると、１つの種類のデータチャンクが別の種類のより大きなデータチャンクの構成要素であるようなデータチャンク階層構造を想定した場合、ソース配列３２から宛先配列３４へのデータ転送は、転送対象のデータチャンクが前記宛先配列内の次のより大きな種類のデータチャンクとの間の最初の境界よりも前に来るように、データチャンク単位で行われる。
【００３０】
図２は、Ｎｒｏｗ行を有し、最初の列がビットｎ０である長方形のソース列３２を宛先配列３４へと転送する方法の一例のフローチャートである。最初にカウンタｎがｎ０に設定される（ステップ４０）。次に、ソース配列３２からビットｎを含むバイトが取り出され（ステップ４２）、処理される（ステップ４４）。
【００３１】
前記バイトの処理には、ソース配列３２内のビットｎを含むバイトと宛先配列３４内の対応するバイトの内容との間の論理演算を実行し、この論理演算の結果を宛先配列３４内の対応するバイトとして格納することが含まれる。
【００３２】
次のバイトの最初のビットが宛先配列３４内に存在するか否かが調べられる（ステップ４６）。このビットが宛先配列３４内に存在しない場合には、次のバイトを処理する必要はなく、次のバイトを処理する必要がないことを示す停止フラグが設定される（ステップ４８）。そうでない場合には、この停止フラグはクリアされる（ステップ５０）。
【００３３】
ｎ番目のビットを含む前記バイトの処理後に、このビットが宛先配列３４内のバイトの最初のビットであるか否かを判定すると有用である（ステップ５２）。最初のビットでない場合には、ポインタが次のバイトの最初のビットまで長いストライド幅でインクリメントされる（ステップ５４）。最初のビットである場合には、ポインタが次のビットまで短いストライド幅でインクリメントされる（ステップ５６）。
【００３４】
これまでの方法では、前記ポインタが宛先配列３４の１つの行を、ステップ５２の結果に従い、短いストライド幅と長いストライド幅との組み合わせで進んでいく。短いストライド幅の数は、この場合には７に限られている。ある時点で、ポインタは宛先配列３４内の現在の行の終端に到達する。ステップ４８では、この時点を示す停止フラグが設定される。次のステップでは、前記停止フラグをチェックして（ステップ５８）、行を進み続けるべきかどうかが判定される。停止フラグがクリアされている場合には、前記ポインタによって示される次のビットについてこの手順が繰り返される（ステップ４２）。このポインタは、メモリセルのある行にわたって、ステップ５２のテストの結果により、短いストライド幅（１ビット）又は長いストライド幅（８ビット）で進行する。そうでない場合には、行カウンタがインクリメントされる（ステップ６０）。ソース配列内に更なる行がないことを行カウンタが示す場合（ステップ６２）には、宛先配列３４内の次の行について全ての手順が繰り返される（ステップ４２）。
【００３５】
このように、上述の方法では、１ビットに対応する短いストライド幅と、１バイトに対応する長いストライド幅との２つの異なるストライド幅が切り換えられる。本方法では、ポインタは宛先メモリ２２のデータチャンク境界に到達するまでは短いストライド幅で進行する。そのような境界に到達すると、その後ポインタは宛先配列３４の外に出てしまうまで長いストライド幅で進行する。しかし、本方法を、任意の２つのデータチャンクに対応するストライド幅の切り換えに使用してもよい。例えば、ビットをバイトに置き換え、バイトをワードに置き換えてもよい。この場合、短いストライド幅は８ビットに設定され、長いストライド幅は１６ビットに設定されることになる。又は、ビットをワードに置き換え、バイトをロングワードに置き換えてもよい。この場合、短いストライド幅は１６ビットに設定され、長いストライド幅は３２ビットに設定されることになる。
【００３６】
図３及び図４に、反時計回り（図３）及び時計回り（図４）に９０度回転されながら宛先配列３４へとコピーされるソース配列３２の例を示す。コピーを行うために、ソース配列３２は、領域のイメージが宛先配列３４内のデータチャンク境界に対してどこに位置するのかに基づき、５つの互いに区別されたソース領域に分割される。特定のソース配列３２が図３及び図４に示す全てのソース領域を含んでもよいし、又は含まなくてもよい。例えば、宛先配列３４があるデータチャンク境界から始まる場合には、領域１を含む必要はない。
【００３７】
領域１、３及び５はそれぞれ、宛先配列３４内のデータチャンク境界間の列の数よりも最大でも１つ少ない数の行を含む。これらの領域内のデータは、ソース配列３４の行のうちで、宛先メモリ２２の２つのデータチャンク境界間の列の一部のみを占める行に格納されたデータである。領域２及び４内のデータは、ソース配列３２の行のうちで、宛先メモリ２２の２つのデータチャンク境界間の列の全てを占める行に格納されたデータである。領域４及び５内のデータは、ソース配列３２の列のうちで、ソースメモリ３０の２つのデータチャンク境界間の列の一部のみを占める列に格納されたデータである。ソース配列３２の左側に領域４及び５と類似した領域がないことに示唆されるように、ソース配列３２の最初の列は、ソースメモリ３０のあるデータチャンク境界と一致している。しかし、ここに記載の方法は、これとは異なる場合にも容易に応用可能である。
【００３８】
領域１、３及び５に格納されたデータは、短いストライド幅で一度に１ビットずつ宛先配列３４へと移動される。領域４に格納されたデータは、１データチャンクに渡って伸びる長いストライド幅で、宛先配列３４へと一次元移動される。
【００３９】
領域２に格納されたデータは、双方の次元で１データチャンクに渡って伸びてブロックを規定する長いストライド幅で、宛先配列３４へと二次元移動される。長いストライド幅での二次元移動を実現するための一つの方法に、ソース配列３２の連続した各列から１個ずつの８個の連続したバイトを、３２ビットのレジスタ変数へとコピーすることがある。このことで、ソースメモリ３０への度重なるアクセスのためのオーバーヘッドが回避される。
【００４０】
時計回り回転と反時計回り回転との実行方法は、基本的に同じである。主な相違は、図３と図４とにおけるソース配列３２のコピー領域の位置の違いによって示されるが、時計回り回転ではソース配列が下から上へと読み取られるのに対し、反時計回り回転ではソース配列３２が上から下へと読み取られるという点である。このことにより、宛先配列３４を左から右へとアドレス指定することが可能となる。
【００４１】
ソース配列３２からのビット（即ち「ソースビット」）を宛先配列３４へ転送するプロセスは、ソース配列３２のある行から選択されたバイトを一時レジスタにコピーし、何らかのマスキング及びシフティングを施すことで相当に加速される。このことは、行を操作するためのコードがＣ＋＋で書かれている場合に、この言語を用いるとレジスタを選択されたマスクでマスキングできることと、前記マスキングの結果をシフトすることとが１つの手順で実行できることから、特に有用である。
【００４２】
上述の手順を、図５と関連させながら詳細に説明する。図５には、ソース配列３２の２つの行から選択されたソースビットを宛先配列３４の対応する２つの列に移動させる方法が図示されている。図５に図示された方法は、ソース配列３２内の行の数が異なる場合及び宛先配列３４内のバイト境界位置が異なる場合にも適合するように、容易に応用可能である。
【００４３】
図５に示す例では、宛先配列３４の２番目の列と３番目の列との間にバイト境界が存在する。従って、２つの行が図４に示すソース配列３２の領域１を形成し、２つの列が図４に示す宛先配列３４の対応する領域１を形成するとみなすことができる。回転を時計回り方向と仮定すると、ソース配列３２は、最終行に始まって上方へと処理される。
【００４４】
この手順の最初のステップでは、これら２つの行のそれぞれ最初のバイト（即ち、ソースビット１乃至７及びソースビット１０乃至１７）が中間レジスタへとコピーされる。次に前記レジスタが、位置７のソースビット（即ちビット１０）以外の全ての要素をゼロにするようにマスクされる。このことは、例えば前記レジスタと１６進８０マスクとの論理積を求めることによって実行される。次に、以前はレジスタ位置７にあったビットがレジスタ位置０にシフトされるように、この結果がシフトされる。この結果、ソース配列３２のソースビット１０に対応するように設定される最下位のビット以外の全てのビットがゼロであるレジスタが生成される。
【００４５】
次に、前記手順が繰り返されるが、このステップでは、マスクが位置１５のビット（即ちソースビット１）以外の全てのビットをゼロにする１６進８０００マスクであり、シフトによって、ソースビット１に対応する位置１５の前記ビットがレジスタ位置１へと移動するという点のみが異なる。この結果、ソース配列３２からのソースビット１に対応するように設定される位置１のビット以外の全てのビットがゼロであるレジスタが生成される。
【００４６】
次に、このマスク及びシフトの結果が、先行するマスク及びシフトの結果に加算される。この結果、ソースビット１と１０とが、宛先配列３４の最初の行に配置されるために正確に要求される順序で互いに隣り合っている中間レジスタが生成される。
【００４７】
次のステップでは、前記中間レジスタのレジスタ位置０及び１に適切に格納された前記ソースビットが、この場合には宛先配列３４の最初の行の最初の２列である、宛先配列３４の正しい位置へと配置される。しかし、前述のように、メモリアクセスはバイト単位で行われる。このため、前記中間レジスタの位置０及び１にあるビットを取り出すと、これらのビットのバイトメイト、即ち位置２乃至７にあるビットも取り出すことになる。従って、単に位置０及び１のこれらのビットを宛先配列３４の宛先バイトにコピーしようとする場合にでも、位置２乃至７にある、これらのビットのバイトメイトも宛先バイトにコピーしてしまうことになる。この結果、標識の静的な部分の一部が書き換えられるという望ましくない事態が生じてしまう。
【００４８】
標識の静的な部分の一部が書き換えられることを防止するために、最初に宛先バイトをマスクして、選択されたビットが、前記所望の２つのビットのバイトメイトによって上書きされないように保護する。この場合、保護されるべきビットは６個ある。従って、これらのビットの保護は、前記宛先バイトと１６進ＦＣ（即ち、１１１１  １１００）との論理積を求めることで行われる。前記１６進ＦＣは、最初の６個のビットの内容を、６個のバイトメイトから保護するための６個の設定されたビットと、２個の所望のソースビットが前記宛先バイト内の対応する２個のビットを上書きすることを可能にする２個のクリアされたビットとを有する。
【００４９】
この操作で使用されるマスクは、保護されるべきビットとその数によって異なる。例えば、遮蔽すべきバイトメイトが５個存在するような位置にバイト境界がある場合には、適切なマスクは１６進ＦＢ（即ち、１１１１  １０００）となる。中間レジスタの特定のバイトからの全てのビットを宛先バイト（即ち、領域２を処理するためのバイト）にコピーしなければならない場合には、適切なマスクは１６進０となる。
【００５０】
ＬＩＳＰ又は同様の命令として表すと、上述の方法は、宛先バイトの値を以下の式の結果に設定することとみなすことができる。
【００５１】
（式１）
2008514523.tif 000003
【００５２】
Ｃ＋＋では、同じ方法を、以下の命令で実行することが可能である。
【００５３】
（式２）
2008514523.tif 000004
【００５４】
宛先配列３４内の領域１の最初の８行を満たすのに必要なソースビットは全て、中間レジスタに格納されている。上述の好適なマスキング及びシフティング操作によって、これらのソースビットを切り離し、適切な位置へと移動させてもよい。マスクを変更して前記所望のソースビットを切り離した状態で、宛先配列３４の次の７行についても上述の手順が繰り返されるので、ソースメモリ３０に再びアクセスする必要がない。中間レジスタ内の全てのソースビットが宛先配列３４へとコピーされると、メモリアクセスが再び行われ、ソース配列３２内に更なるビットがある場合にはこれらのビットが取り出されて、上述の手順が繰り返される。
【００５５】
メモリアクセス方法を、バイト境界が特定の位置にあると想定した場合のソース配列３２の領域１から宛先配列３４の領域１へのビットの転送と関連させながら、詳細に説明した。使用するマスク並びにシフトの範囲及び方向に若干の変更を加えることで、上述の方法を、図３及び図４に図示するいかなる２つの領域間のビット転送にも応用することが可能である。
【００５６】
本発明とその好適な実施例を説明したが、新規であると訴え、特許証による保護を求めるところは、請求の範囲に記載される。
【図面の簡単な説明】
【００５７】
【図１】パッケージの標識のためのシステムのブロック図である。
【図２】情報をソースメモリから標識装置に関連したメモリへとコピーするための方法である。
【図３】ソース領域とこれらに対応する宛先配列内のイメージとを、反時計回り及び時計回り方向にそれぞれ回転させて図示したものである。
【図４】ソース領域とこれらに対応する宛先配列内のイメージとを、反時計回り及び時計回り方向にそれぞれ回転させて図示したものである。
【図５】ソースビットを宛先バイトにコピーする過程のいくつかの段階を図示したものである。
【図１】
2008514523.tif 000005
【図２】
2008514523.tif 000006
【図３】
2008514523.tif 000007
【図４】
2008514523.tif 000008
【図５】
2008514523.tif 000009