(57)【特許請求の範囲】
【請求項１】
ホストコンピュータより受信したコントロールＩ／Ｏコマンドを記憶するメモリと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、印字ユニットのプリントを制御するコントローラとを有し、
前記Ｉ／Ｏレジスタは、前記印刷ユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とするプリンタ。
【請求項２】
前記コントロールＩ／Ｏコマンドは、コントロールＩ／Ｏコマンドの実行を所定時間ウエイトするウエイトコマンドを含むことを特徴とする請求項１記載のプリンタ。
【請求項３】
前記メモリを制御するメモリコントローラを有し、
前記メモリコントローラは、前記コントロールＩ／Ｏコマンドの実行を第１優先度とし、リフレッシュの実行を第２優先度とし、ホストコンピュータからのメモリのアクセスを第３優先度とすることを特徴とする請求項１記載のプリンタ。
【請求項４】
前記プリンタは、インクジェットプリンタを含むことを特徴とする請求項１記載のプリンタ。
【請求項５】
前記印字ユニットは、印字ヘッド、印字ヘッドを搭載したキャリッジを駆動するモータ、および、紙送りモータを含むことを特徴とする請求項１記載のプリンタ。
【請求項６】
ホストコンピュータより受信したコントロールＩ／Ｏコマンドを記憶するメモリと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、スキャンユニットのスキャンを制御するコントローラとを有し、
前記Ｉ／Ｏレジスタは、前記スキャンユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とするスキャナ。
【請求項７】
ホストコンピュータより受信したコントロールＩ／Ｏコマンドをメモリに記憶するステップと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、印字ユニットのプリントを制御する制御ステップとを有し、
前記Ｉ／Ｏレジスタは、前記印刷ユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とするプリント方法。
【請求項８】
ホストコンピュータより受信したコントロールＩ／Ｏコマンドをメモリに記憶するステップと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、スキャンユニットのスキャンを制御する制御ステップとを有し、
前記Ｉ／Ｏレジスタは、前記スキャンユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とするスキャン方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パーソナルコンピュータとプリンタとが接続され、ホストがプリンタを制御して印字を行うような印字制御システムに関するものである。
【０００２】
【従来の技術】
従来、ホスト（パーソナルコンピュータ）とプリンタとはインターフェース（セントロニクスなど）を介して接続され、ホストから送られる印字データ、印字指示をプリンタが順次処理することにより印字を行っていた。印字データ、印字指示はプリンタ固有のコントロールコードで、プリンタドライバーによって作成され、プリンタへと送られる。
【０００３】
プリンタではホストから送られてくるコントロールコードを解析し印字データであれば印字データを印字できる分だけ蓄える。印字データのコントロールコードはラスタ形式をしているものがあり、蓄えられた印字データに対してイメージ加工処理や変換処理を行いプリンタに搭載する印字ヘッドで印字可能な形式にイメージデータを再構成し、印字ヘッドにイメージデータを送ることで印字を行っていた。コントロールコードでは給・排紙、フィードなどの各種コントロールコードに対する処理を行っていた。マイクロソフト社のウィンドウズシステムでの印字手順については図３１で説明する。
【０００４】
また、ホスト（パーソナルコンピュータ）とスキャナとはインターフェース（ＳＣＳＩなど）を介して接続され、ホストから送られるスキャンコントロールコードをスキャナが順次処理し、スキャンしたイメージデータをホストへ送信することによりスキャンを行っていた。スキャンコントロールコードはスキャナ固有のコントロールコードで、スキャナアプリケーションによって作成され、スキャナへと送られる。スキャナではホストから送られてくるコントロールコードを解析しスキャン動作とイメージデータの送信とを行っている。スキャンコントロールコードでは給・排紙、フィードなどの各種コントロールコードに対する処理を行っていた。
【０００５】
【発明が解決しようとする課題】
しかしながら、従来例ではホストはアプリケーションからの印字指示により印刷イメージを作り、印刷イメージからプリンタへと送る印字データと印字指示のコントロールコードを作成していた。また、ホストとプリンタとが完全に独立しているため、プリンタは印字のためにコントロールコードの解析処理、イメージの展開処理、イメージの加工処理などを行うために中央処理装置ＣＰＵ、処理手順を保持するＲＯＭ、データを蓄えるＲＡＭなどの多くの資源を有していた。また、プリンタに対してホストの性能は飛躍的に向上しており、従来プリンタで行っていた処理をホストで処理する方が有利な状況も起こってきた。
【０００６】
そこで、本発明の目的は、従来プリンタで処理していた処理をプリンタよりも高性能なホストで行うことにより、従来プリンタが内蔵していた資源を簡素化しコストを低く押さえたプリンタ装置とホストでの印字制御システムを提供することにある。
【０００７】
また、従来例ではホストはスキャンのコントロールコードを作成し送信しているだけであった。また、ホストとスキャナとが完全に独立しているため、スキャナはスキャンのためにコントロールコードの解析処理、スキャン動作制御、イメージデータの加工処理などを行うために中央処理装置ＣＰＵ、処理手順を保持するＲＯＭ、データを蓄えるＲＡＭなどの多くの資源を有していた。また、スキャナに対してホストの性能は飛躍的に向上しており、従来スキャナで行っていた処理をホストで処理する方が有利な状況も起こってきた。
【０００８】
そこで、本発明の目的は従来スキャナで処理していた処理をスキャナよりも高性能なホストで行うことにより、従来スキャナが内蔵していた資源を簡素化しコストを低く押さえたスキャナ装置とホストでのスキャナ制御システムを提供することにある。
【０００９】
また、上述したホストベースプリントシステムにおいては、ホストでのプリンタの制御を実現するためにマイクロソフト社のウィンドウズ、ウィンドウズプリンティングシステムやプリンタドライバーに変更を加える必要があった。
【００１０】
そこで、本発明の目的は従来プリンタで処理していた処理をプリンタよりも高性能なホストで行うことにより、従来プリンタが内蔵していた資源を簡素化しコストを低く押さえたプリンタ装置とホストでのプリンタ制御に関する方法を提供することにある。また、従来からのプリンタドライバーからのコントロールコードを入力として利用するため、ウィンドウズ、ウィンドウズプリンディングシステムやプリンタドライバに変更を加える必要がない印字制御システムを提供することにある。
【００１１】
また、従来例のようなシステムでは、ホストはアプリケーションからの印刷指示により印刷イメージを作り、印刷イメージからプリンタへ送る印字データと印字コマンドのコントロールコードを作成する必要があった。
【００１２】
また、プリンタでは印字のためにコマンドの解析処理、イメージの展開処理、イメージの加工処理などを行うために中央処理装置ＣＰＵ、処理手順を保持するＲＯＭ、データを蓄えるＲＡＭなどの多くの資源を有していた。
【００１３】
また、プリンタに対してホストの性能は飛躍的に向上しており、従来プリンタで行っていた処理をホストで処理する方が有利な状況も起こってきた。
【００１４】
そこで、本発明の目的は従来プリンタで処理していた処理をプリンタよりも高性能なホストで行うことにより、従来プリンタが内蔵していた資源を簡素化しコストを低く押さえたプリンタとホストでの、プリンタ制御（時間管理）システムを提供することにある。
【００１５】
【課題を解決するための手段】
上記課題を解決するために、本発明のプリンタは、
ホストコンピュータより受信したコントロールＩ／Ｏコマンドを記憶するメモリと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、印字ユニットのプリントを制御するコントローラとを有し、
前記Ｉ／Ｏレジスタは、前記印刷ユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とする。
【００１６】
また、本発明のスキャナは、
ホストコンピュータより受信したコントロールＩ／Ｏコマンドを記憶するメモリと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、スキャンユニットのスキャンを制御するコントローラとを有し、
前記Ｉ／Ｏレジスタは、前記スキャンユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とする。
【００１７】
また、本発明のプリント方法は、
ホストコンピュータより受信したコントロールＩ／Ｏコマンドをメモリに記憶するステップと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、印字ユニットのプリントを制御する制御ステップとを有し、
前記Ｉ／Ｏレジスタは、前記印刷ユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とする。
【００１８】
また、本発明のスキャン方法は、
ホストコンピュータより受信したコントロールＩ／Ｏコマンドをメモリに記憶するステップと、
前記メモリに記憶されたコントロールＩ／Ｏコマンドを所定周期で読み出し、読み出したコントロールＩ／ＯコマンドをＩ／Ｏレジスタに書き込むことにより、スキャンユニットのスキャンを制御する制御ステップとを有し、
前記Ｉ／Ｏレジスタは、前記スキャンユニットを制御するコントローラを構成するレジスタ郡であり、各ユニットを特定するアドレスが規定され、各アドレスに制御データを書き込むことにより各ユニットを制御し、
前記コントロールＩ／Ｏコマンドは、Ｉ／Ｏレジスタのアドレスを指示するアドレスとＩ／Ｏレジスタに書き込む制御データとを含むことを特徴とする。
【００２０】
【発明の実施の形態】
（実施の形態１）
図１は本発明の実施の形態であるホスト部とプリンタ部が一体となった携帯型パーソナルコンピュータ（以下パソコンと略す）を示す斜視図である。
【００２１】
パソコン１は、装置本体１０１、キーボード１０２、表示部１０３、及びプリンタユニット２の各部によって構成されている。
【００２２】
上カバー１０４は、装置本体１０１に対して、その後縁の両端に設けられたヒンジ１０４ａを介して回動可能に取りつけられている。
【００２３】
これにより本装置の使用時には、上カバー１０４は、その回動によって表示部１０３が見やすくなる位置まで開けられ、また不使用時には閉じられていてカバーとして機能することができる。
【００２４】
また、デバイスの一例として表示部１０３の表示素子としては、表示部を薄く構成できることから液晶表示素子（ＬＣＤ）を用いている。
【００２５】
プリンタユニット２は、操作者が開閉可能な開口部を持ち、記録ヘッドの交換が可能なようになっている。
【００２６】
記録紙は図示されていないが、キーボード１０２の下部に設けられた給紙口１０１ａから挿入され、装置本体１０１内を貫通する搬送路内を搬送されて装置後方の排紙口から排出される。
【００２７】
キーボード１０２は、装置本体１０１の両側に設けられたヒンジ１０２ａを介して回動可能に取りつけられている。
【００２８】
キーボード１０２の下部に記録紙の搬送路が設けられているため、記録紙をセットした状態でもキーボード１０２や表示部１０３の操作が可能である。
【００２９】
図２はパソコンの内部構成を示す概略ブロック図であり、本発明の実施の形態でのホストコンピュータ部（以下ホスト部と略す）はＰＣ／ＡＴ互換機と同等のシステムで構成されている。
【００３０】
まず、ホスト部で主制御をつかさどっているのが中央処理装置（ＣＰＵ）であり、その基本的な制御を指示するのがＢＩＯＳ−ＲＯＭである。
【００３１】
数値演算プロセッサ（ＦＰＵ）はＣＰＵ−ｂｕｓに接続され、浮動小数点演算や対数計算などの演算命令を拡張するもので有る。
【００３２】
フロッピーディスクドライブ（ＦＤＤ）やハードディスクドライブ（ＨＤＤ）からフロッピーディスクコントローラ（ＦＤＣ）やハードディスクコントローラ（ＨＤＣ）を経由してアプリケーションプログラムやデータファイルを読み出し、システムメモリ（ＳＹＳＴＥＭ  ＲＡＭ）を利用してアプリケーションプログラムの実行を行なう。
【００３３】
この時の画面の表示は、ビデオコントローラ（ＶＧＡ）と表示メモリ（ＶＲＡＭ）により液晶表示器（ＬＣＤ）にキャラクタやグラフィック等の表示を行ない、キーボード（ＫＢ）からのキー入力は、キーボードコントローラ（ＫＢＣ）を経由して取り込まれる。
【００３４】
リアルタイムクロック（ＲＴＣ）は、現在時刻を示すタイマである。
【００３５】
ＤＭＡコントローラ（ＤＭＡＣ）は、メモリ−メモリ間、メモリ−Ｉ／Ｏ間において、ＣＰＵの介在なしでデータ転送を行なう。
【００３６】
割り込みコントローラ（ＩＲＱＣ）は、各Ｉ／Ｏからの割り込みを受け付け、優先順位に従って処理を行なう。
【００３７】
システムタイマ（ＴＩＭＥＲ）は、数チャンネルのフリーランニングタイマを持ち、種々の時間管理を行なう。
【００３８】
その他に外部コネクタにつながるポートブロックとして、ＲＳ−２３２Ｃ仕様のシリアルポート（ＳＩＯ）、セントロニクス仕様のパラレルポート（ＰＩＯ）、ＩＳＡ仕様の拡張ポート（ＥＩＯ）があり、それぞれＳＩ／Ｆコネクタ、ＰＩ／Ｆコネクタ、ＥＩ／Ｆコネクタにつながる。
【００３９】
またユーザに対して動作状況を伝えるＬＥＤ出力ポートや、操作スイッチ入力ポートがつながる、ＰＡＮＥＬもある。
【００４０】
本発明の実施の形態におけるプリンタ部は、ホスト部に対してＩＳＡ−ｂｕｓで直接つながれた形態になっていて、ＩＳＡ−ｂｕｓのＩ／Ｏレジスタを介してデータのやり取りを行うことができる。
【００４１】
図３に本発明の実施の形態におけるホスト部ＲＡＭのメモリマップの配置を示す。
【００４２】
ＲＡＭは標準領域として０００００Ｈ〜ＢＦＦＦＦＨの６４０ＫＢと、拡張領域として１０００００Ｈ〜ＦＤＦＦＦＦＨの１５ＭＢがあり、ＲＡＭはこれらの領域に配置されるようにメモリマッピングされる。
【００４３】
ＲＡＭの標準領域の先頭部分０００００Ｈ〜００３ＦＦＨには、割り込み用のベクタを保存する領域が有り、この中に割り込みに対する各処理のエントリーアドレスが保存される。
【００４４】
ビデオＲＡＭ領域、及びビデオＢＩＯＳ領域は、ビデオコントローラの内部に配置され、ビデオＢＩＯＳ領域にはビデオ制御のためのプログラムが保存され、ビデオＲＡＭ領域にはビデオ表示データが保存される。
【００４５】
拡張ボードＲＯＭ領域はＣ８０００Ｈ〜ＤＦＦＦＦＨまでの領域に配置され、拡張ポートに繋がるデバイスにより使用される。
【００４６】
システムＢＩＯＳ領域はＦ００００Ｈ〜ＦＦＦＦＦＨに配置され、各種Ｉ／Ｏの処理を行うＢＩＯＳプログラムを保持している。
【００４７】
図４に本発明の実施の形態におけるホスト部のＩ／Ｏアドレスマップを示す。
【００４８】
ここで示したＩ／Ｏアドレスは、ハードウエアで設定されている各デバイスのＩ／Ｏアドレスのレジスタを介して、データのやり取り（ＲＥＡＤ・ＷＲＩＴＥ）をホストと各デバイスの間で行うものであるが、特にプリンタ部に関連する部分について説明する。
【００４９】
パラレルポート１〜３（ＰＩＯ／ＩＯ）はホスト部からＰＩ／Ｆに繋がった外部デバイスに対して汎用のパラレルデータを送出するためのレジスタである。
【００５０】
図２０に従来のプリンタ制御部のシステム構成を示す。
【００５１】
Ｉ／Ｆコントローラは、ホストのパラレルポートに対してケーブルを介して繋がり、ホストから送出される印字動作を行うためのコントロールコードを受け取るブロックである。
【００５２】
Ｐ−ＣＰＵは、プリンタ制御部の中で主制御を司るＣＰＵであり、Ｉ／Ｆコントローラからのコントロールコードの取り込み処理と、プリンタの印字動作を行うための処理を、時間配分しながら制御を行う。
【００５３】
Ｐ−ＲＯＭは、Ｐ−ＣＰＵの動作プログラムの格納されたＲＯＭである。
【００５４】
Ｐ−ＰＡＭは、Ｐ−ＣＰＵが動作プログラムの実行に際してワークメモリとして使ったり、Ｉ／Ｆコントローラから送られてきたコントロールコードを一時保管する受信メモリとして使ったり、コントロールコードを実際の記録ヘッドに転送するデータの形態に変換したイメージデータを一時保管する印字メモリとして使ったりするＲＡＭである。
【００５５】
プリンタＩ／０コントローラは、プリンタユニットを動作させるための制御ブロックで、Ｐ−ＣＰＵがＰＲＴ−ｂｕｓに対してプリンタＩ／Ｏコントローラに割り当てられた任意アドレスのレジスタに対するアクセス処理を行うことにより、プリンタユニットのキャリアモータやフィードモータの相切り替えや、印字ヘッドに対するイメージデータの転送などを行うブロックである。
【００５６】
すなわち、従来のプリンタ制御部による印字処理は、ホストから送られてくる印刷のためのコントロールコードをＰ−ＣＰＵが遂次解釈しながら、キャリアを水平方向に走査して印字ヘッドに対してイメージデータを転送し印字を行っていた。
【００５７】
また、従来のプリンタ制御部による画像読み取り処理は、プリンタユニットのキャリア上に印字ヘッドの代わりに画像読み取り用のスキャナヘッドが載った状態で、ホストからのスキャン実行を指示するコントロールコードを受けると、キャリアを走査しながらスキャナヘッドで画像データを読み取り、パラレルインターフェイスのニブルモード等を利用してホストに画像データを遂次転送していた。
【００５８】
本発明の実施の形態で用いているプリンタ制御部は、汎用のパラレルポートを用いずにプリンタ制御部の専用ポート（ＰＲＴ／ＩＯ）を用いて印字動作を行うシステムとなっている。
【００５９】
ＰＲＴ／ＩＯのアドレス設定等を行うのが１００Ｈ〜１０７Ｈのセットアップレジスタ（ＳＥＴ／ＩＯ）でＰＲＴ／ＩＯを構成するスーパーバイザコマンドレジスタ（ＳＶＡ／ＩＯ・ＳＶＤ／ＩＯ）と制御Ｉ／Ｏコマンドレジスタ（ＢＡＴ／ＩＯ）のベースアドレスとポートイネーブルの設定を行うものである。
【００６０】
図５はセットアップレジスタ（ＳＥＴ／ＩＯ）の構成を示す図である。
【００６１】
０１０２番地のセットアップレジスタ２は、ＰＲＴ／ＩＯのイネーブルビットがビット０に設けられ、イネーブルビットが“１”の時にのみホスト部からプリンタポートへのアクセスを可能としている。
【００６２】
０１０３〜０１０４番地のセットアップレジスタ３・４は、ＰＲＴ・ＩＯのベースアドレスを設定するレジスタで、設定されたアドレスから連続した８バイトをホスト部とプリンタ部の間のデータのやり取りをポートに設定するレジスタである。
【００６３】
ベースアドレスは００００Ｈ〜０３Ｆ８Ｈまでの範囲内において、８バイト単位で任意に設定することができる。
【００６４】
図６はプリンタ部ポート（ＰＲＴ・ＩＯ）の構成を示す図である。
【００６５】
プリンタ部ポートの構成は、セットアップレジスタ（ＳＥＴ／ＩＯ）で設定されたベースアドレスから連続した８バイトのうち、最初の１バイト目がスーパーバイザコマンド・アドレスレジスタ（ＳＶＡ／ＩＯ）、２バイト目がスーパーバイザコマンド・データレジスタ（ＳＶＤ／ＩＯ）でこれらは８ビットアクセスであり、３〜４バイト目が制御Ｉ／Ｏコマンド・データレジスタ（ＢＡＴ／ＩＯ）でこれは１６ビットアクセス専用のレジスタとなる。
【００６６】
スーパーバイザコマンドはホストからプリンタ制御部のＰＲＴ−ｂｕｓに対して直後アクセスを行うことができるレジスタであり、直接制御Ｉ／Ｏコマンドとも呼ぶ。
【００６７】
ＳＶＡ／ＩＯはＰＲＴ−ｂｕｓへのアクセスアドレスを設定するレジスタで、ＰＡ〔７：０〕の８ビットを任意に設定するスーパーバイザコマンド・アドレスレジスタである。
【００６８】
ＳＶＤ／ＩＯはＰＲＴ−ｂｕｓへのデータ入出力を行うレジスタで、ＰＤ〔７：０〕の８ビットを使って操作するスーパーバイザコマンド・データレジスタである。
【００６９】
ＢＡＴ／ＩＯはＭＥＭ−ｂｕｓへのデータ入出力を行うレジスタで、ＭＤ〔１５：０〕の１６ビットでアクセスする制御Ｉ／Ｏコマンド・データレジスタである。
【００７０】
図７は本発明の実施の形態におけるプリンタ制御部の内部構成を示すブロック図である。
【００７１】
プリンタ部の主要ロジックは、ホスト部のＩＳＡ−ｂｕｓからステートマシンコントローラ（ＳＴＡＴＥ  ＭＡＣＨＩＮＥ  ＣＯＮＴＲＯＬＬＥＲ）を経由して、プリンタバス（ＰＲＴ−ｂｕｓ）に繋がるプリンタＩ／Ｏコントローラ（ＰＲＩＮＴＥＲ  Ｉ／Ｏ  ＣＯＮＴＲＯＬＬＥＲ）と、メモリバス（ＭＥＭ−ｂｕｓ）に繋がるプリンタメモリ（ＰＲＩＮＴＥＲ  ＭＥＭＯＲＹ）によって構成されている。
【００７２】
プリンタユニットに繋がるプリンタＩ／Ｏコントローラの入力側には、プリンタユニットからのセンサ情報を読み取ったプリンタステータス信号（Ｐｒｉｎｔｅｒ  Ｓｔａｔｕｓ）がとりこまれ、その情報をもとに出力側のモータコントロール信号（Ｍｏｔｏｒ  Ｃｏｎｔ．）やヘッドコントロール信号（Ｈｅａｄ  Ｃｏｎｔ．）によってプリンタユニット（ＰＲＩＮＴＥＲ  ＵＮＩＴ）のモータやインクヘットを駆動し印字動作を行う。
【００７３】
またプリンタユニットのキャリアにスキャナヘッドの載ったシステムの場合は、スキャナヘッドで読み出した画像データをプリンタＩ／Ｏコントローラを経由してプリンタメモリに書き込むことでスキャン動作を行う。
【００７４】
ここで、図２０に示した従来のプリンタ制御部と構成を対比させてみると、本発明の実施の形態ではプリンタ側にＣＰＵとＲＯＭが存在しない点が大きな特徴であるといえる。
【００７５】
図８はステートマシンコントローラの内部構成を示すブロック図である。
【００７６】
ステートマシンコントローラはホスト部のＩＳＡ−ｂｕｓを経由してプリンタユニットの動作をつかさどるための制御ブロックであり、セットアップレジスタで設定したプリンタ部ポートの各々のレジスタによってアクセスを行うことができる。
【００７７】
スーパーバイザコマンドレジスタは、ホスト部からプリンタＩ／ＯコントローラへのＩ／ＯアクセスをＰＲＴ−ｂｕｓを介して行ったり、制御Ｉ／Ｏコマンドの起動・停止コマンドの発行を行うためのレジスタで、スーパーバイザコマンド・アドレスレジスタ（ＳＶＡ／ＩＯ）で設定したＰＲＴ−ｂｕｓのアドレス（ＰＡ）に対してスーパーバイザコマンド・データレジスタ（ＳＶＤ／ＩＯ）を使ってデータ（ＰＤ）の読み書きを行うことを行う。
【００７８】
制御Ｉ／Ｏコマンド・データレジスタ（ＢＡＴ／ＩＯ）は、ホスト部からプリンタ部メモリをＭＥＭ−ｂｕｓを介して直接アクセスするための機能であり、「アドレス＋データ」のセットでデータ書き込み動作を行うとメモリアドレスカウンタのライトアドレスに対応したプリンタ部メモリのアドレス（ＭＡ）に２バイトのデータ（ＭＤ）が書き込まれ、書き込まれた後にはライトアドレスが毎回＋２インクリメントされる。
【００７９】
制御Ｉ／Ｏコマンド・データレジスタを使ったデータの読み出し動作も同様で、リードアドレスに対応したプリンタ部メモリのデータが２バイト読み出され、読み出し動作後には毎回リードアドレスが＋２インクリメントされる。
【００８０】
制御Ｉ／Ｏコマンド・データレジスタによってメモリに書き込まれたデータは制御Ｉ／Ｏコマンドを実行するために使われるデータであり、スーパーバイザコマンドレジスタによる制御Ｉ／Ｏコマンドの起動コマンドとしてＢＰ−ｓｔａｒｔに“１”を書き込む事により、プリンタ部メモリから制御Ｉ／Ｏアドレスカウンタのリードアドレスで示されたデータを２バイトずつ読み出し、読み出したデータの下位バイトがアドレス・上位バイトがデータを表しているので、ＰＲＴ−ｂｕｓに読み出したアドレスとデータを出力してプリンタＩ／Ｏコントローラのレジスタへのデータライトアクセス動作を行うことで制御Ｉ／Ｏコマンドの実行を行う。
【００８１】
この制御Ｉ／Ｏコマンドの実行により読み出されたリードアドレスは＋２ずつ毎回インクリメントされ、制御Ｉ／Ｏコマンドの停止コマンド（Ｂｐ−ｅｎｄ）が発行されてＢＰ−ｓｔａｒｔが“０”になるまで、制御Ｉ／Ｏコマンド実行動作が繰り返される。
【００８２】
リフレッシュコントロールは、Ｄ−ＲＡＭのリフレッシュ動作をつかさどる制御ブロックで、８ｍｓの間に５１２回のリフレッシュアクセスを行うようになっていて、その時のアドレスを毎回インクリメントさせるのがリフレッシュアドレスカウンタである。
【００８３】
メモリアドレスコントロールは、プリンタ部メモリに対して各アクセス要求に優先順位をつけて処理を行うブロックで、制御Ｉ／Ｏコマンドの実行が第一優先・リフレッシュが第二優先・ホスト部からのメモリアクセスが第三優先となっている。
【００８４】
これは制御Ｉ／Ｏコマンドの実行時間が変動するのを防ぐための優先順序となっている。
【００８５】
図９は、プリンタ部でスーパーバイザコマンドや制御Ｉ／Ｏコマンドを実行する際に必要となるステートマシンコントローラ内のレジスタのアドレスマップである。
【００８６】
これら００番地から１Ｆ番地までのレジスタにおいて、制御Ｉ／Ｏコマンドの実行に必要となるスーパーバイザコマンドでのみで使用するレジスタとして００〜０Ｆ番地・１８〜１Ａ番地と、制御Ｉ／Ｏコマンド上でのみ使用するレジスタの１０〜１５番地・１Ｃ〜１Ｅ番地がある。
【００８７】
また２０番地以降についてはプリンタＩ／Ｏコントローラに対してスーパーバイザコマンドや制御Ｉ／Ｏコマンドによるアクセスを行うレジスタであるが詳しくは後述する。
【００８８】
００番地から１Ｆ番地までの各レジスタの機能について個々に説明すると、００番地は制御Ｉ／Ｏコマンドの実行開始を指示する制御Ｉ／Ｏコマンドコントロールレジスタ（ＢＰ−ｓｔａｒｔ）であり、スーパーバイザコマンドのライトアクセスにより実行される。
【００８９】
このレジスタは、制御Ｉ／Ｏコマンドが実行中は常に“１”になっているので、“０”であるかどうかをスーパーバイザコマンドにより読み出して確認することで、ホスト側で制御Ｉ／Ｏコマンドの実行が完了したことを検出するのに使うことも可能である。
【００９０】
０１番地はシステム内のレジスタを全てリセットするリセットトリガ（ＣＲＥＳ）であり、スーパーバイザコマンドのライトアクセスにより実行される。
【００９１】
０８〜０Ａ番地はホストからプリンタメモリの読み出しアドレス（ＭＲＡ）を設定するレジスタであり、スーパーバイザコマンドにより設定を行いホストからのメモリデータの読み出しにより＋２インクリメイントされる。
【００９２】
０Ｃ〜０Ｅ番地はホストからのプリンタメモリへの書き込みアドレス（ＭＷＡ）を設定するレジスタであり、スーパーバイザコマンドにより設定を行いホストからのメモリデータの書き込みにより＋２インクリメントされる。
【００９３】
１０番地は制御Ｉ／Ｏコマンドの実行停止を指示するコマンドエンドトリガ（ＢＰ−ｅｎｄ）であり、制御Ｉ／Ｏコマンドにより実行される。
【００９４】
１２番地は制御Ｉ／Ｏコマンドによりレジスタデータをメモリに書き込む動作を行うためのレジスタライトトリガ（ＲＥＧＷＲ）であり、制御Ｉ／Ｏコマンドにより実行される。
【００９５】
１３番地は制御Ｉ／Ｏコマンドによりレジスタデータをメモリに書き込む際のレジスタアドレス（ＲＷＡ）を設定するレジスタであり、制御Ｉ／Ｏコマンドにより実行される。
【００９６】
１４番地はウエイト処理を行うタイマレジスタの下位バイト（ＷＡＩＴＬ）を設定するレジスタであり、制御Ｉ／Ｏコマンドの実行において０．５μｓ単位でウエイトを挿入する際に使用するレジスタで、０．５μｓ（０１Ｈ）から１２７．５μｓ（ＦＦＨ）まで設定することができる。
【００９７】
１５番地はウエイト処理を行うタイマレジスタの上位バイト（ＷＡＩＴＨ）を設定するレジスタであり、制御Ｉ／Ｏコマンドの実行において１２８μｓ単位でウエイトを挿入する際に使用するレジスタで、１２８μｓ（０１Ｈ）から３２６４０μｓ（ＦＦＨ）まで設定することができる。
【００９８】
１８〜１Ａ番地は制御Ｉ／Ｏコマンドのプリンタメモリからの実行読み出しアドレス（ＢＲＡ）を設定するレジスタであり、制御Ｉ／Ｏコマンドの実行開始アドレスをスーパーバイザコマンドで設定した後に、制御Ｉ／Ｏコマンドの実行に伴ってメモリデータの読み出しごとに＋２インクリメントされる。
【００９９】
１Ｃ−１Ｅ番地はレジスタデータのプリンタメモリへの書き込みアドレス（ＢＷＡ）を設定するレジスタであり、１３番地のレジスタライトトリガによるレジスタデータのメモリへの書き込み動作によって＋２インクリメントされる。
【０１００】
図１０は制御Ｉ／Ｏコマンドの動作を示すタイミングチャートである。
【０１０１】
制御Ｉ／Ｏコマンドの実行サイクルはプログラムカウンタの基本クロック（ＣＬＫＰＲＧ）に同期していて決められた時間間隔で実行されるが、本発明の実施の形態では５００ｎｓ単位でひとつの制御Ｉ／Ｏコマンドが実行される様になっている。
【０１０２】
始めに一連の制御Ｉ／Ｏコマンドがプリンタメモリに書き込まれた状態において、起動コマンドとしてスーパーバイザコマンドでＢＰ−ｓｔａｒｔに“１”が書き込まれるとＣＬＫＰＲＧが動作を開始する。
【０１０３】
１クロック目（ＢＲＡ：＃００）は、ＭＥＭ−ｂｕｓから読み出した制御Ｉ／Ｏコマンドのアドレスが通常のプリンタＩ／Ｏコントローラへアクセス（２０番地以降）の場合で、読み出したアドレスに対してデータをＰＲＴ−ｂｕｓに書き込む処理を行い、ＣＬＫＰＲＧの立ち下がりに同期して制御Ｉ／Ｏコマンドのリードアドレスカウンタ（ＢＲＡ）が＋２インクリメントされる。
【０１０４】
２クロック目（ＢＲＡ：＃０２）は、ＭＥＭ−ｂｕｓから読み出した制御Ｉ／ＯコマンドのアドレスとデータがＰＲＴ−ｂｕｓへのアクションではなくメモリ書き込み処理を行うレジスタライトコマンド（１２番地）であった場合で、制御Ｉ／Ｏコマンドアドレスカウンタのレジスタライトアドレスに対応したメモリアドレス（ＭＲＡ）に所望のレジスタのデータを書き込み、その後ＣＬＫＰＲＧの立ち下がりに同期して制御Ｉ／Ｏコマンドのリードアドレスカウンタ（ＢＲＡ）が＋２インクリメントされる。
【０１０５】
３クロック目（ＢＲＡ：＃０４）は、ＭＥＭ−ｂｕｓから読み出した制御Ｉ／Ｏコマンドがコマンドエンドトリガ（ＢＰ〜ｅｎｄ：１０番地）であった場合で、ＰＲＴ〜ｂｕｓの１０番地に書き込む処理でＢＰ−ｅｎｄが発行されたことをステータスコントローラが検知し、次のＣＬＫＰＲＧの立ち下がりのタイミングでＢＰ−ｓｔａｒｔを“０”にセットしてＣＬＫＰＲＧクロックを停止させ、制御Ｉ／Ｏコマンドのリードアドレスカウンタを＋２インクリメントして制御Ｉ／Ｏコマンドの動作実行を完了する。
【０１０６】
図２１は、制御Ｉ／Ｏコマンドの中のウエイトコマンドの動作を示すタイミングチャートである。
【０１０７】
１クロック目（ＢＲＡ：＃００）は、ＭＥＭ−ｂｕｓから読み出した制御Ｉ／Ｏコマンドがウエイトコマンドである１４番地に０１Ｈを書き込むコマンドであった場合で、ＰＲＴ−ｂｕｓの１４番地に０１Ｈが書き込まれたところで、ＣＬＫＰＲＧの１クロック分のウエイトがかかり、その後５００ｎｓ経過後にＣＬＫＰＲＧの立ち下がりに同期して制御Ｉ／Ｏコマンドのリードアドレスカウンタ（ＢＲＡ）が＋２インクリメントされる。
【０１０８】
ウエイト後の２クロック目（ＢＲＡ：＃０２）は、ＭＥＭ−ｂｕｓから読み出した制御Ｉ／Ｏコマンドがコマンドエンドトリガ（ＢＰ−ｅｎｄ：１０番地）であった場合で、ＰＲＴ−ｂｕｓの１０番地にデータを書き込む処理でＢＰ−ｅｎｄが発行されたことをステータスコントローラが検知し、次のＣＬＫＰＲＧの立ち下がりのタイミングでＢＰ−ｓｔａｒｔを“０”にセットしてＣＬＫＰＲＧクロックを停止させ、制御Ｉ／Ｏコマンドのリードアドレスカウンタを＋２インクリメントして制御Ｉ／Ｏコマンドの動作実行を完了する。
【０１０９】
（プリンタユニットの構成）
図１１にプリンタユニットの外形図、図１２に本プリンタのアクチュエータと、そのドライバ回路の構成を示す。
【０１１０】
図１１中１はプリンタユニット本体を表す。本プリンタユニットのキャリッジ２には脱着可能な印字記録ヘッドユニット３と、印字記録ヘッドユニット３と同形状の画像取り込み用スキャナヘッドユニット４が装着可能になっている。印字記録ヘッドユニットは吐出口１２８ドットのモノクロ印字ヘッドユニットと、吐出口１３６ドットのカラー印字ヘッドユニットの２種類が装着可能である。
【０１１１】
図１２で示すように本プリンタは大別して記録ヘッド１２１とその駆動系１２２、キャリッジ１２３とその駆動系１２４、紙送り機構１２５とその駆動系１２６、各種センサー１２７により構成される。さらにこれら駆動系を制御し、プリンタ動作を司るプリンタＩＯコントローラＩＣ１２８が設けられている。さらに電源回路１２９、ユーサーにステータスを知らしめるＬＥＤ１２９、ユーザーによる制御が可能であるスイッチ１２１０が設けられている。
【０１１２】
図１３に記録ヘッドおよびヘッドドライバ回路の構成を示す。なお本実施例では印字ヘッドユニットとしてカラー印字ヘッドユニットの説明を行うが、モノクロ印字ヘッドユニットの動作原理も基本的には同様である。
【０１１３】
ここで本例では吐出ユイニットは１３６個の吐出口を有するものとし、＃１〜＃１３６は吐出ユニットに設けられた吐出口の位置に対応した番号を示すものとする。
【０１１４】
Ｒ１〜Ｒ１３６はそれぞれ＃１〜＃１３６の吐出口に対応して設けられた吐出エネルギー発生素子としての発熱抵抗体である。発熱抵抗体Ｒ１〜Ｒ１３６は１６個を１単位としたブロックに分割され、プリンタＩＯコントローラＩＣから出力される４ビットのイネーブル信号ＥＥＮＢ、ＢＥＮＢ１〜３（以下ブロックイネーブル信号）をデコードすることにより生成される各ブロックのコモンイネーブル信号により、通電経路のオン・オフが制御される。
【０１１５】
また、各発熱抵抗体にはプリンタＩＯコントローラＩＣから本記録ヘッドに信号線ＨＤＡＴＡを介し、転送クロックＨＣＬＫに同期してシリアル転送され、シリアル・パラレル変換後ヘッド内のデータラッチにて所定のタイミングでラッチされる吐出データに応じて、データに対応した位置の抵抗体の通電経路をオン・オフ制御するセグメントイネーブル信号が接続されている。発熱抵抗体はブロックイネーブル信号とセグメントイネーブル信号の両方がイネーブル状態になっている場合に通電経路がオン、すなわち発熱状態となる。
【０１１６】
最後に、選択された抵抗体を発熱するパルスをタイミング制御するための制御信号ＨＥＮＢ（ヒートイネーブル）が各発熱抵抗体に接続されている。これによって定められたヒートパルスに従って発熱抵抗体Ｒ１〜Ｒ１３６の通電、発熱が行われる。
【０１１７】
図１４は上記構成によるヘッド駆動のタイミングチャートを示す。ヘッド走査方向上のある位置においてブロックイネーブル信号の入力に応じてコモンイネーブル信号が順次オンされる。そのオンにより一つのブロックが選択されて通電状態になるので選択されたブロック内において転送された画像データに応じてセグメント信号をそれぞれイネーブル・ディスエーブル状態にすることにより選択された発熱抵抗体がヒートイネーブル信号で与えられたパルスタイミングで通電され、発熱に応じてインクが吐出されドット記録が行われる。
【０１１８】
図１５はヘッドを搭載するキャリッジの走査動作を行うキャリッジモーター並びにモータードライバの構成図である。また図１６はその駆動タイミングを示す。
【０１１９】
本例においてはキャリッジモータとしてコイルφ１〜φ４を有するステッピングモータを用い、駆動信号ＣＭａ、ＣＭａ＿、ＣＭｂ、ＣＭｂ＿と電流制御信号ＰＷＭＡ、ＰＷＭＢを備えたモータードライバにより駆動している。また、紙送り機能を構成するラインフィードモータについても同様な構成で駆動信号ＬＦａ、ＬＦａ＿ＬＦｂ、ＬＦｂ＿により駆動される。
【０１２０】
本例ではセンサー機能として、キャリッジが走査範囲左端の所定場所に位置したことを検出するホームポジションセンサ、記録対象物である紙を検出するペーパーセンサが設けられており、これらセンサ情報に基づいたプリンタ制御が行われる。またシステムの温度情報、モーターの駆動電圧が後述するＡ／Ｄ変換機能を介し、検出可能となっている。
【０１２１】
本プリンタにはユーザーによって操作可能であるプリントストップ・再スタートスイッチと一回の押下により定められたライン数の紙送りを実行するラインフィードスイッチが設けられている。
【０１２２】
本プリンタの電源部は、プリンタの各アクチュエータへの電源供給を行う。プリンタＩＯコントローラＩＣの制御により、モーター駆動用電源のほかに、ヘッド駆動用のロジック電源とインク吐出用発熱抵抗体の駆動電圧（以下ヘッドドライブ電源）のオン・オフ制御を行う。
【０１２３】
（プリンタＩＯコントローラＩＣの構成）
プリンタＩＯコントローラＩＣのブロック図を図１７に示す。本ＩＣは与えられた制御制御Ｉ／Ｏコマンドに基づいたプリンタ制御を行う。本コントローラＩＣは図中に示す様に、モーター制御ブロック１７１、記録ヘッド制御ブロック１７２、データ転送ブロック１７３、センサステータスブロック１７４、パワー・ＩＯポートブロック１７５と、制御Ｉ／Ｏコマンド実行タイミング制御回路１７６により構成される。また本ＩＣはステートマシンコントローラと、プリンタバスと称するアドレスバスＰＡ｛７：０｝・データバスＰＤ｛７：０｝とタイミング制御信号で接続されている。各制御ブロックは各々後述する機能を持っており、基本的には制御Ｉ／Ｏコマンド格納用入力レジスタ群と制御回路により構成される。図１８に本コントローラＩＣのレジスタマップを示す。以下の説明では各レジスタ名は表中の該当するアドレスを使って説明する。
【０１２４】
（制御Ｉ／Ｏコマンド実行タイミング制御回路）
プリンタＩＯコントローラＩＣに接続されるプリンタバスＰＡ｛７：０｝、ＰＤ｛７：０｝は制御Ｉ／Ｏコマンド実行タイミング回路に接続される。プリンタバスは本回路を経由して各制御ブロックのレジスタ群にレジスタアドレスバスＩＰＡ｛７：０｝、レジスタデータバスＩＰＤ｛７：０｝として接続される。
【０１２５】
本回路はステートマシンコントロールＩＣでレジスタアドレスとレジスタデータに分割された制御Ｉ／Ｏコマンドがプリンタバスを介して送られてくる際、本回路内でレジスタアドレス、データを保持し、プリンタコントロール部内のアドレスで指定されたレジスタに格納するタイミング、すなわち制御Ｉ／Ｏコマンド実行開始タイミングを一定にすることにより連続した制御Ｉ／Ｏコマンド処理の中で各制御Ｉ／Ｏコマンドの読み出しから実行までの制御Ｉ／Ｏコマンド実行時間を統一する機能を制御する回路である。具体的には、プリンタバスのデータは保持手段として設けられた制御Ｉ／Ｏコマンドラッチによりラッチされ、コマンド実行基準クロックＣＫＰＲＧの立ち上がりエッジに同期したタイミングで該当レジスタにデータが格納される。このタイミングでレジスタアドレスバス、レジスタデータバスにラッチしたデータを、書き込み用制御信号〜ＩＷＲには書き込み信号を出力する。本回路の構成図を図２２に、タイミング図を図１９に表す。図中ＰＡ、ＰＤバスを介してレジスタ６７、３１にデータが異なるタイミングで書き込まれているが、該当レジスタに書き込まれるタイミング信号〜ＩＷＲは常にＣＫＰＲＧに同期したタイミングで出力される。
【０１２６】
（キャリッジモータ（ＣＭ）・ラインフィードモータ（ＬＦ）モータ制御ブロック）
ＣＭ，ＬＦであるコイルφ１〜φ４を有するステッピングモータをモータドライバを介して４相２砺磁駆動するための駆動相信号各々４本と電流制御を行うためのＰＷＭ出力信号各々２本を制御するブロックである。相シフト出力パターンをレジスタ６６、７６でセットした後、レジスタ６７、７７にアクセスすることによるシフトトリガによって相信号の出力制御をおこなう。また、レジスタ６４、６５、７４、７５にＰＷＭの設定値を格納し、レジスタ６７、７７にアクセスすることによるシフトトリガよって設定値に基づくＰＷＭ出力を行う。
【０１２７】
（記録ヘッド制御（ヒート・スキャン）ブロック）
本プリンタにプリントヘッド、またはスキャナヘッドが装着されている場合、その記録ヘッドの吐出制御を行うブロックである。
【０１２８】
レジスタ３４〜３８はヒートモード設定用レジスタであり、ヘッドのリセット、プリント・スキャンの動作切り替えなどの制御、ヒート動作を行う際の各種オプションを設定するレジスタである。またレジスタ３Ａ〜３Ｆはスキャンモード設定用レジスタであり、スキャン動作を行う際のオプション、スキャンヘッドへの制御Ｉ／Ｏコマンド送出の制御を設定するレジスタである。
【０１２９】
レジスタ４０〜４Ｂはヒートイネーブル信号の出力であるヒートパルスのパルスタイミングを設定するレジスタ群である。スキャン動作時のタイミング設定には上記パルスタイミング設定用レジスタの一部を兼用する。
【０１３０】
レジスタ３１へのデータ０１Ｈ書き込みによるヒート・スキャントリガ制御Ｉ／Ｏコマンドが認識されると、記録ヘッドの１カラム分の吐出制御が開始される。上記レジスタの設定値に基づいたヒート・スキャン制御が行われる。
【０１３１】
（データ転送ブロック）
本ブロックは記録ヘッド制御時に所定データをパラレル・シリアル変換し、コントローラからヘッドに向けて吐出データとしてシリアル転送クロックに同期して送出する機能を持つ。８ビットレジスタ３２に吐出データが１バイト格納されると、転送動作が行われる。
【０１３２】
また、レジスタ３４の設定により、スキャナ制御モードが指定されている場合には、スキャナユニットから転送クロックとともにシリアル送出されてくるスキャン画像データをシリアル・パラレル変換の後、１６ビットデータとしてレジスタ３Ａ、３Ｂに格納する。
【０１３３】
（センサステータス  ブロック）
プリンタドライブ回路に設けられているセンサのレベルをレジスタ情報として読みだし可能とするブロックである。この情報はレジスタ２４に格納される。また、センサの内アナログ出力入力のものでＡ／Ｄ入力に接続されている信号はレジスタ２７のＡ／Ｄ変換トリガビットをアクセスすることにより、本ブロックでＡ／Ｄ変換され、デジタルデータとしてレジスタ２Ｃに格納される。これらセンサー情報をフィードバックすることにより、プリンタの状況に応じた制御が可能となる。
【０１３４】
（パワー・ＩＯポートブロック）
プリンタ駆動用の電源を制御するブロックである。具体的にはモーター駆動用電源のほかに、ヘッド駆動用のロジック電源とインク吐出用発熱抵抗体の駆動電圧（以下ヘッドドライブ電源）の制御をレジスタ２６の設定により行う。また、プリンタスタート・ストップ用、ラインフィード用スイッチ、ステータス表示用ＬＥＤなどの入出力ポートの制御もレジスタ２０、２１、２８、２９を使用して行われる。
【０１３５】
図２３〜図２９で、プリンタ駆動のための制御Ｉ／Ｏコマンド構成について説明する。
【０１３６】
この実施例では、キャリッジモーター、ラインフィードモーターともバイポーラ型ステッピングモーターで、かつ駆動制御方式は、定電流チョッパー方式のＰＷＭ変調によるマイクロステップ駆動である（一相あたり６分割して駆動）。
【０１３７】
キャリッジ初期化動作時のキャリッジモーターの回転数は、ステッピングモーターの自起動領域（３００ｐ．ｐ．ｓ）であるので、等速駆動をさせる。
【０１３８】
また、印字動作とキャリッジ復帰動作時のおのおののモーター回転数（７６６ｐ．ｐ．ｓ）は、ステッピングモーターの自起動領域より高速であるので、印字（キャリッジ復帰）速度にするため、相切り替え時間を漸次小さくしていき（加速）、等速区間は、加速の最後の相切り替え時間で駆動し、また、停止するまで相切り替え時間を漸次大きくしていく（減速）必要があるので、大きく分けて、加速動作部分と等速動作部分、減速動作部分の３つの部分から構成される。
【０１３９】
図２３に実際のプリンタとしてのキャリッジ初期化動作（ホームポジション検出動作）のフローチャートを示す。本発明の実施の形態のようなシステムでは、従来のプリンタのようにキャリッジモーターなどのアクチュエーターを動作させながらそれにつれて変化するセンサーの状態を監視し、状態変化によって、動作中のアクチュエーターに対する制御Ｉ／Ｏコマンドを変更することができないため、次のような構成をとる。すなわち、図のＳ１でスーパーバイザーコマンドを用いてＨＰセンサーの状態を読み込む。Ｓ２で読み込んだ値からＨＰセンサーの状態を判断し、ＯＮであれば、前回の初期化が正常に完了（初期化済み位置）しているとして、Ｓ３に進み、キャリッジを方向にセンサー情報を毎パルスごとにバッファーにダンプしながら右方向に（キャリッジ初期化済み位置から印字方向へ向いて）１２０パルス移動させる。Ｓ４で再びスーパーバイザーコマンドを用いてキャリッジ停止後のＨＰセンサーの状態を読み込む。Ｓ５で、Ｓ４で読み込んだ値からＨＰセンサーの状態を判断し、ＯＦＦであれば、Ｓ６に進んで毎パルスごとにバッファーにダンプしたセンサー情報からＨＰセンサーがＯＮからＯＦＦへ切り替わった位置を判断し、切り替わったと判断した位置からＯＮ方向に５４パルスの地点を初期化済み位置として、Ｓ７で左方向（印字位置からキャリッジ初期化済み位置へ向いて）に移動して初期化終了とする。Ｓ５でＳ４で読み込んだ値からＨＰセンサーの状態を判断し、ＯＮであれば、前回の初期化が正常に完了しておらず、初期化済み位置より左側にいた可能性があるので、Ｓ８に進んで、キャリッジをさらに右方向へ１２０パルス（センサー情報を毎パルスごとにバッファーにダンプしながら）移動させる。Ｓ９で再びスーパーバイザーコマンドを用いてキャリッジ停止後のＨＰセンサーの状態を読み込む。Ｓ１０でＳ９で読み込んだ値からＨＰセンサーの状態を判断し、ＯＦＦであれば、Ｓ６、Ｓ７と進んで前述のように初期化終了とする。まだＯＮであれば、センサーが壊れているか、キャリッジが物理的に動作していない可能性が高いので、Ｓ１１に進んでエラーとする。
【０１４０】
Ｓ２でＨＰセンサーの状態がＯＦＦの場合、前回の初期化が正常に完了していないで、印字位置近傍にいるとして、Ｓ１２に進み、キャリッジをセンサー情報を毎パルスごとにバッファーにダンプしながら左方向（印字位置からキャリッジ初期化済み位置へ向いて）１０パルス移動させる。Ｓ１３で、スーパーバイザーコマンドを用いてキャリッジ停止後のＨＰセンサーの状態を読み込む。Ｓ１４でＳ１３で読み込んだ値からＨＰセンサーの状態を判断し、ＯＦＦであれば、Ｓ１５に進んで毎パルスごとにバッファーにダンプしたセンサー情報からＨＰセンサーがＯＦＦからＯＮへ切り替わった位置を判断し、そこからＯＮ方向にパルスの地点を初期化済み位置として、Ｓ１８で初期化位置（ＨＰセンサーがＯＦＦからＯＮへ切り替わった位置からＯＮ方向に５４パルスの地点）になるように、足らない分を左方向へ移動する。
【０１４１】
Ｓ１４でＨＰセンサーの状態を判断し、ＯＮであれば、Ｓ１７に進んで何回目の左スキャンかチェックし、４８回以下なら再びＳ１２に戻って、前述の動作を繰り返す。Ｓ１７で回数が４８回を越えていたら、このプリンタの場合、右側壁から左側壁まで４８０パルス分の長さなので、センサーが壊れているか、キャリッジが物理的に動作していない可能性があるので、Ｓ１８に進んでエラーとする。
【０１４２】
図２４は、前述の初期化動作中で、実際にキャリッジを動作させる際の、キャリッジモーター駆動制御Ｉ／Ｏコマンド群の一例を示す。制御Ｉ／Ｏコマンドは、初期設定の行から始まり、左から右に、また上から下の行へと進む（６Ｂ０１，６１０１，６９０１，６４０１，６５２８，１２００，１５０８，１４５５，６４０６…）。
【０１４３】
各制御Ｉ／Ｏコマンドは、アドレス・データの構成になっており、２バイトをひとかたまりとして扱い、16進数で表記する（例えば、制御Ｉ／Ｏコマンド６Ｂ０１は、アドレス６Ｂｈにデータ０１ｈの書き込み）。
【０１４４】
キャリッジ初期化（ホームポジション検出動作）時の動作速度（相切り替え時間）を３００ｐ．ｐ．ｓ．とすると、１相あたりの切り替え時間は３．３３３３ｍｓｅｃ＝３３３３ｕｓｅｃ、１／６相あたりの切り替え時間では５５５ｕｓｅｃになる。本実施例でのウエイトタイマー制御Ｉ／Ｏコマンドの基本単位が、０．５ｕｓと６４ｕｓとすると、６４ｕｓｅｃ×８＋０．５＝５１２．５、０．５ｕｓｅｃ×８５＋０．５＝４３ｕｓｅｃ、５１２．５＋４３ｕｓｅｃ＝５５５．５ｕｓｅｃよって、ウエイト制御Ｉ／Ｏコマンドは、各々ＷＡＩＴＨ（６４ｕｓｅｃ単位）＝１５０８Ｈ、ＷＡＩＴＬ（０．５ｕｓｅｃ単位）＝１４５５Ｈとなる。
【０１４５】
実際は、ウエイト制御Ｉ／Ｏコマンドの他の各々の制御Ｉ／Ｏコマンドを処理するのにそれぞれ約０．５ｕｓｅｃの時間が必要になるため、正しく時間管理するためには、ウエイトタイマー制御Ｉ／Ｏコマンド間の他の制御Ｉ／Ｏコマンド数の分も計算にいれてウエイトタイマー制御Ｉ／Ｏコマンドの値を設定する必要がある。
【０１４６】
ここでの説明では、便宜上ウエイトタイマー制御Ｉ／Ｏコマンド自身の処理時間以外は考慮にいれていない。実際には、制御Ｉ／Ｏコマンド群を発行する時にその分も考慮して再計算する。
【０１４７】
等速部分は、基本的には２行目〜１３行目までを必要パルス数分だけ繰り返すことにより実現される。２行目〜１３行目までを一周期にしているのは、ＰＷＭ変調によるマイクロステップ駆動の電流変化テーブルの周期がモーターの相２パルス分で一周期になるからである。
【０１４８】
制御Ｉ／Ｏコマンド個々の内容について説明すると、一行目の初期設定は、動作前のキャリッジモーターの回転方向の設定「ここでは右方向キャリッジ移動の例として０１（左方向なら００）」（６Ｂ０１）、バッファへダンプする中身「センサーポート（２４Ｈ）の内容」を指示するレジスタライトアドレスの設定制御Ｉ／Ｏコマンド（１３２４）、キャリッジモーターＰＷＭ電流ＯＮ制御Ｉ／Ｏコマンド（６１０１）である。
【０１４９】
二行目は、最初の相シフト（スタート相の次の相励磁）制御Ｉ／Ｏコマンド（６９０１）、キャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０１）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２８）、センサー情報ダンプのためのレジスタライトトリガー制御Ｉ／Ｏコマンド（１２００）、動作速度３００ｐ．ｐ．ｓ．（１／６相あたりの切り替え時間５５５ｕｓｅｃ）を実現するためのウエイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０８）、およびウエイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４５５）、である。
【０１５０】
三行目はスタート相から１／６相分だけ進んだ位置でのキャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０６）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２６）、センサー情報ダンプのためのレジスタライトトリガー制御Ｉ／Ｏコマンド（１２００）、動作速度３００ｐ．ｐ．ｓ．（１／６相あたりの切り替え時間５５５ｕｓｅｃ）を実現するためのウエイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０８）、およびウエイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４５５）、である。
【０１５１】
同様に、四行目はスタート相から２／６相分進んだ位置、五行目はスタート相から３／６相分進んだ位置、六行目はスタート相から４／６相分進んだ位置、七行目はスタート相から５／６相分進んだ位置、の制御Ｉ／Ｏコマンドである。
【０１５２】
基本的に三行目から七行目は、処理の内容は一緒で、キャリッジモーターＰＷＭ電流のＡ相／Ｂ相に書き込む電流値だけが、マイクロステップ実現のために、正弦関数的に変化している。実際には電流の流れは、Ａ相／Ｂ相とも方向性があるが、ここではその電流量の絶対値だけ書き込み、方向については、ドライバ側で変化させるので負の値はとらない。八行目はスタート相から６／６相分進んだ位置すなわちスタート相の次の相なので、再び相シフト（スタート相の次の次の相励磁）（６９０１）、キャリッジモーターＰＷＭ電流（Ａ相）書き込み（６４０１）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み（６５２８）、センサー情報ダンプのためのレジスタライトトリガー（１２００）、動作速度３００ｐ．ｐ．ｓ．（１／６相あたりの切り替え時間５５５ｕｓｅｃ）を実現するためのウエイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０８）、およびウエイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４５５）、である。
【０１５３】
図２５〜図２９は、実際に片方向印字動作（キャリッジ復帰動作）、紙送り（ラインフィード）動作とを遂次行う際の、制御Ｉ／Ｏコマンド群の一例を示す。
【０１５４】
図２５〜２７は、片方向印字動作（キャリッジ復帰動作）時の制御Ｉ／Ｏコマンド群を表す。印字動作時のキャリッジモーター回転数は、８１３ｐ．ｐ．ｓであり、通常のステッピングモーターの自起動領域より高速であるので、加減速動作が必要となり、大きく分けて、加速動作と等速動作部分（印字動作を含む）、減速動作部分の３つの部分から構成される。
【０１５５】
図２５は、片方向印字動作（キャリッジ復帰動作）時の加速部分である。制御Ｉ／Ｏコマンドは、初期設定の行から始まり、左から右に、また上から下の行へと進む（６Ｂ０１，６１０１，６４０１，６５２８，６５２８，１５９Ｃ，１４００，６９０１…）。
【０１５６】
一行目の初期設定は、動作前のキャリッジモーターの回転方向の設定「ここでは右方向キャリッジ移動（および印字）の例として０１（左方向なら００）」（６Ｂ０１）、キャリッジモーターＰＷＭ電流ＯＮ制御Ｉ／Ｏコマンド（６１０１）である。
【０１５７】
二行目はスタート相の励磁のためのキャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０１）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２８）、スタート相の励磁（保持）時間設定のためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５９Ｃ）、およびウエイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４００）、である。
【０１５８】
三行目は、最初の相シフト（スタート相の次の相励磁）制御Ｉ／Ｏコマンド（６９０１）、キャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０１）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２８）、加速動作を実現するためのウエイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５１９）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４Ｄ３）、である。
【０１５９】
四行目はスタート相から１／６相分だけ進んだ位置でのキャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０６）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２６）、加速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５１８）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４Ｂ３）、である。
【０１６０】
同様に、五行目はスタート相から２／６相分進んだ位置、六行目はスタート相から３／６相分進んだ位置、七行目はスタート相から４／６相分進んだ位置、八行目はスタート相から５／６相分進んだ位置、の制御Ｉ／Ｏコマンドである。基本的に四行目から八行目は、処理の内容は一緒で、キャリッジモーターＰＷＭ電流のＡ相／Ｂ相に書き込む電流値が、マイクロステップ実現のために、正弦関数的に変化し、また、ウェイトタイマー制御Ｉ／Ｏコマンドの設定値が、加速動作実現のために少しずつ小さくなっている。
【０１６１】
通常の加速動作では、相切り替えのタイミングで徐々に時間間隔をせばめていくのであるが、本実施例の場合、マイクロステップ制御を行っているため、同じ相内でも、徐々に時間を変化させていく必要がある（加速１−１〜加速１−６の間でも変化させている）。
【０１６２】
また、実際には電流の流れは、Ａ相／Ｂ相とも方向性があるが、ここではその電流量の絶対値だけ書き込み、方向については、モータードライバー側で変化させるので負の値はとらない。
【０１６３】
九行目はスタート相から６／６相分進んだ位置すなわちスタート相の次の相なので、再び相シフト（スタート相の次の次の相励磁）（６９０１）、キャリッジモーターＰＷＭ電流（Ａ相）書き込み（６４２８）、キャリッジモーターＰＷＭ電流の（Ｂ相）書き込み（６５０１）、加速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０Ｆ）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４ＥＤ）、である。
【０１６４】
以下、同様に加速動作を本実施例では２２ステップ分繰り返す。加速が終了すると、次は等速部分である。
【０１６５】
図２６は、片方向印字動作時の等速部分である。
【０１６６】
一行目は、最初の相シフト（等速動作スタート相の次の相励磁）制御Ｉ／Ｏコマンド（６９０１）、キャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０１）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２８）、等速度８１３ｐ．ｐ．ｓ（１／６相あたりの切り替え時間２０５ｕｓｅｃ）を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０８）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４３３）、である。
【０１６７】
二行目は等速動作スタート相から１／６相分だけ進んだ位置でのキャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０６）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２６）、等速度８１３ｐ．ｐ．ｓ（１／６相あたりの切り替え時間２０５ｕｓｅｃ）を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０８）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４３３）、である。
【０１６８】
同様に、三行目はスタート相から２／６相分進んだ位置、四行目はスタート相から３／６相分進んだ位置、五行目はスタート相から４／６相分進んだ位置、六行目はスタート相から５／６相分進んだ位置、の制御Ｉ／Ｏコマンドである。
【０１６９】
基本的に二行目から六行目は、処理の内容は一緒で、キャリッジモーターＰＷＭ電流のＡ相／Ｂ相に書き込む電流値だけが、マイクロステップ実現のために、正弦関数的に変化している。実際には相を流れる電流は、Ａ相／Ｂ相とも方向性があるが、ここではその電流量の絶対値だけ書き込み、方向については、ドライバー側で変化させるので負の値はとらない。
【０１７０】
七行目はスタート相から６／６相分進んだ位置、すなわち等速動作スタート相の次の相の位置にいるので、再び相シフト制御Ｉ／Ｏコマンド（等速動作スタート相の次の次の相励磁）（６９０１）、キャリッジモーターＰＷＭ電流の（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４２８）、キャリッジモーターＰＷＭ電流の（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５０１）、等速動作速度８１３ｐ．ｐ．ｓ．（１／６相あたりの切り替え時間２０５ｕｓｅｃ）を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０８）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４３３）、である。
【０１７１】
等速部分は、基本的には１行目〜１２行目までを必要パルス分だけ繰り返すことにより実現される。１行目〜１２行目までを一周期にしているのは、ＰＷＭ変調によるマイクロステップ駆動の電流変化テーブルの周期がモーターの相２パルス分で一周期になるからである。
【０１７２】
本発明の実施の形態では、キャリッジモーター１パルス（１相分）で、１／６０インチキャリッジが移動する。１相をマイクロステップ制御するために６分割しているので、１マイクロステップあたり１／６０インチ÷６＝１／３６０インチの移動に相当する。
【０１７３】
印字解像度が３６０ｄ．ｐ．ｉ相当の記録ヘッドでは、各マイクロステップごとに、１カラムの印字に相当するので、実際に３６０ｄ．ｐ．ｉ相当の印字を行う場合には、図２６の各行（マイクロステップ）中に１カラム分の印字データ転送制御Ｉ／Ｏコマンドとヒートスキャントリガー制御Ｉ／Ｏコマンド等がさらに付加されるが、これについては後述する。
【０１７４】
等速（印字動作）が終了すると、次は減速部分である。
【０１７５】
図２７は、片方向印字動作時の減速部分である。制御Ｉ／Ｏコマンドは、第一行から始まり、左から右に、また上から下の行へと進む（６９０１，６４０１，６５２８，１５０３，１４３３，６４０６…）。
【０１７６】
一行目は、最初の相シフト（減速スタート相の次の相励磁）制御Ｉ／Ｏコマンド（６９０１）、キャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０１）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２８）、減速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０３）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４３３）、である。
【０１７７】
二行目はスタート相から１／６相分だけ進んだ位置でのキャリッジモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（６４０６）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（６５２６）、減速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０３）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４３３）、である。
【０１７８】
同様に、三行目はスタート相から２／６相分進んだ位置、四行目はスタート相から３／６相分進んだ位置、五行目はスタート相から４／６相分進んだ位置、六行目はスタート相から５／６相分進んだ位置、の制御Ｉ／Ｏコマンドである。基本的に二行目から六行目は、処理の内容は一緒で、キャリッジモーターＰＷＭ電流のＡ相／Ｂ相に書き込む電流値が、マイクロステップ実現のために、正弦関数的に変化し、また、ウェイトタイマー制御Ｉ／Ｏコマンドの設定はが減速動作実現のために少しずつ大きくなるが、減速１〜３パルスあたりではまだそれほど変化していない。
【０１７９】
通常の減速動作では、相切り替えのタイミングで徐々に時間間隔広げていくのであるが、本発明の実施の形態の場合、マイクロステップ制御を行っているめ、同じ相内でも、徐々に時間を変化させていく必要がある（例えば、減速３−１〜減速３−６の間でも変化させている）。
【０１８０】
また、実際には電流の流れは、Ａ相／Ｂ相とも方向性があるが、ここではその電流量の絶対値だけ書き込み、方向については、モータードライバー側で変化させるので負の値はとらない。
【０１８１】
七行目は減速スタート相から６／６相分進んだ位置、すなわち減速スタート相の次の相なので、再び相シフト（減速スタート相の次の次の相励磁）（６９０１）、キャリッジモーターＰＷＭ電流（Ａ相）書き込み（６４２８）、キャリッジモーターＰＷＭ電流（Ｂ相）書き込み（６５０１）、加速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０３）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４３３）、である。
【０１８２】
以下、同様に減速動作を本実施例では２２ステップ分繰り返す。減速が終了すると、減速最後の相（停止相）を励磁し、しかるのちに、最後の行で、電流を切る。
【０１８３】
キャリッジ復帰動作は、基本的には、前述の加速、等速、減速という制御Ｉ／Ｏコマンドと同じであるが、加速の初期設定で、回転方向が異なるのと、（６Ｂ０１−＞６ｂ００）、等速部分に印字データ、ヒートトリガーとかの制御Ｉ／Ｏコマンドが付加されないという違いがある。
【０１８４】
図２８〜２９は、紙送り動作（ここでは２４パルスの送り）の加速、減速の制御Ｉ／Ｏコマンド群を表す。２４パルス送り時のラインフィードモーター回転数の最高速度は、８０１ｐ．ｐ．ｓであり、通常のステッピングモーターの自起動領域より高速であるので、加減速動作が必要となる。
【０１８５】
本発明の実施の形態では紙送りモーターの加速減速に各々２０パルス必要であるが、ここでは２４パルスの紙送りなので、加速減速とも各々のテーブルから１２パルスずつを用い、等速部分は存在しない。よって、加速動作と、減速動作の２つの部分から構成される。
【０１８６】
図２８は、２４パルス紙送り動作時の加速部分である。制御Ｉ／Ｏコマンドは、初期設定の行から始まり、左から右に、また上から下の行へと進む（７Ｂ０１，７１０１，７４０１，７５２８，１５９Ｃ，１４００，７９０１…）。
【０１８７】
一行目の初期設定は、動作前の紙送りモーターの回転方向の設定「ここでは正方向の紙送りの例として０１（逆方向なら００）」（７Ｂ０１）、紙送りモーターＰＷＭ電流ＯＮ制御Ｉ／Ｏコマンド（７１０１）である。
【０１８８】
二行目はスタート相の励磁のための紙送りモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（７４０１）、紙送りモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（７５２８）、スタート相の励磁（保持）時間設定のためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５９Ｃ）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４００）、である。
【０１８９】
三行目は、最初の相シフト（スタート相の次の相励磁）制御Ｉ／Ｏコマンド（７９０１）、紙送りモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（７４０１）、紙送りモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（７５２８）、加速動作を実現するためのウエイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０５）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４２４）、である。
【０１９０】
四行目はスタート相から１／６相分だけ進んだ位置での紙送りモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（７４０６）、紙送りモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（７５２６）、加速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０５）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４１Ｃ）、である。
【０１９１】
同様に、五行目はスタート相から２／６相分進んだ位置、六行目はスタート相から３／６相分進んだ位置、七行目はスタート相から４／６相分進んだ位置、八行目はスタート相から５／６相分進んだ位置、の制御コマンドである。基本的に四行目から八行目は、処理の内容は一緒で紙送りモーターＰＷＭ電流のＡ相／Ｂ相に書き込む電流値が、マイクロステップ実現のために、正弦関数的に変化し、また、ウェイトタイマー制御Ｉ／Ｏコマンドの設定値が、加速動作実現のために少しずつ小さくなっている。
【０１９２】
通常の加速動作では、相切り替えのタイミングで徐々に時間間隔をせばめていくのであるが、本発明の実施の形態の場合、マイクロステップ制御を行っているため、同じ相内でも、徐々に時間を変化させていく必要がある（加速１−１〜加速１−６の間でも変化させている）。
【０１９３】
また、実際には電流の流れは、Ａ相／Ｂ相とも方向性があるが、ここではその電流量の絶対値だけ書き込み、方向については、モータードライバー側で変化させるので負の値はとらない。
【０１９４】
九行目はスタート相から６／６相分進んだ位置すなわちスタート相の次の相なので、再び相シフト（スタート相の次の次の相励磁）（７９０１）、紙送りモーターＰＷＭ電流（Ａ相）書き込み（７４２８）、紙送りモーターＰＷＭ電流（Ｂ相）書き込み（７５０１）、加速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０Ｆ）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４ＥＤ）、である。
【０１９５】
以下、同様に加速動作を本発明の実施の形態では１２ステップ分繰り返す。加速が終了すると、次は減速部分である。
【０１９６】
図２９は、２４パルス紙送り動作時の減速部分である。制御Ｉ／Ｏコマンドは、第一行から始まり、左から右に、または上から下へと進む（７９０１，７４０１，７５２８，１５０３，１４２０，７４０６…）。
【０１９７】
一行目は、最初の相シフト（減速スタート相の次の相励磁）制御Ｉ／Ｏコマンド（７９０１）、紙送りモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（７４０１）、紙送りモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（７５２８）、減速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０３）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４２０）、である。
【０１９８】
二行目は減速スタート相から１／６相分だけ進んだ位置での紙送りモーターＰＷＭ電流（Ａ相）書き込み制御Ｉ／Ｏコマンド（７４０６）、紙送りモーターＰＷＭ電流（Ｂ相）書き込み制御Ｉ／Ｏコマンド（７５２６）、減速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０３）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４２４）、である。
【０１９９】
同様に、三行目はスタート相から２／６相分進んだ位置、四行目はスタート相から３／６相分進んだ位置、五行目はスタート相から４／６相分進んだ位置、六行目はスタート相から５／６相分進んだ位置、の制御Ｉ／Ｏコマンドである。基本的に二行目から六行目は、処理の内容は一緒で紙送りモーターＰＷＭ電流のＡ相／Ｂ相に書き込む電流値が、マイクロステップ実現のために、正弦関数的に変化し、また、ウェイトタイマー制御Ｉ／Ｏコマンドの設定値が減速動作実現のために少しずつ大きくなっている。
【０２００】
通常の減速動作では、相切り替えのタイミングで徐々に時間間隔を広げていくのであるが、本実施例の場合、マイクロステップ制御を行っているため、同じ相内でも、徐々に時間を変化させていく必要がある（例えば、減速３−１〜加速３−６の間でも変化させている）。
【０２０１】
また、実際には電流の流れは、Ａ相／Ｂ相とも方向性があるが、ここではその電流量の絶対値だけ書き込み、方向については、モータードライバー側で変化させるので負の値はとらない。
【０２０２】
七行目は減速スタート相から６／６相分進んだ位置、すなわち減速スタート相の次の相なので、再び相シフト（減速スタート相の次の次の相励磁）（７９０１）、紙送りモーターＰＷＭ電流（Ａ相）書き込み（７４２８）、紙送りモーターＰＷＭ電流（Ｂ相）書き込み（７５０１）、加速動作を実現するためのウェイトタイマー制御Ｉ／ＯコマンドＨ（６４ｕｓｅｃ単位）（１５０３）、およびウェイトタイマー制御Ｉ／ＯコマンドＬ（０．５ｕｓｅｃ単位）（１４３４）、である。
【０２０３】
以下、同様に加速動作を本実施例では１２ステップ分繰り返す。減速が終了すると、減速最後の相（停止相）を励磁し、しかるのちに、最後の行の停止処理で、電流を切る。
【０２０４】
図３０はメディアの構成を示した図で、メディアにはフロッピーディスク、ＣＲ−ＲＯＭ、ＭＯなどがある。メディアの構成で（１）Ｉｎｓｔａｌｌｅｒは（２）から（７）のソフトをホストシステムにインストールするためのソフトウエア、（２）ＲＴＯＳ  Ｒｕｎｔｉｍｅ  ＬｉｂｒａｒｙはホストシステムでＲＴＯＳ環境を提供するためのソフトウエア、（３）Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒはホストのスプーリングサブシステムに追加されＷ−ＲＴＯＳ  Ｈｏｓｔ  Ａｐｐｌｉｃａｔｉｏｎとデ−タのやり取りを行うソフトウエア、（４）Ｗ−ＲＴＯＳ  Ｈｏｓｔ  ＡｐｐｌｉｃａｔｉｏｎはＬａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒから印字コマンドを受け取り、ＲＴＯＳ  Ｔａｓｋへ渡す役割と、ＲＴＯＳ  Ｔａｓｋをコントロールする役割を行うソフトウエア、（５）ＲＴＯＳ  ＴａｓｋはＷ−ＲＴＯＳ  Ｈｏｓｔ  Ａｐｐｌｉｃａｔｉｏｎから渡される印字、スキャンコマンドなどに従って印字やスキャンを行うソフトウエアで、コントロールコード解析Ｔａｓｋ、印字処理Ｔａｓｋ、スキャン処理Ｔａｓｋ、ヘッド交換処理Ｔａｓｋ、給・排紙処理Ｔａｓｋ、タイマー管理Ｔａｓｋ、回復系処理Ｔａｓｋ、ヘッド温調処理Ｔａｓｋ、エラー処理Ｔａｓｋ、電源管理Ｔａｓｋからなる。（６）ＶＣＯＭＭ  Ｐｏｒｔ  ＤｒｉｖｅｒはＶＣＯＭＭからの印字コマンドをＲＴＯＳ  Ｄｒｉｖｅｒに引き渡す処理を行うソフトウエア、（７）ＲＴＯＳＤｒｉｖｅｒはＶＣＯＭＭ  Ｐｏｒｔ  Ｄｒｉｖｅｒからの印字コマンドをＲＴＯＳ  Ｔａｓｋへ引き渡すことを行うソフトウエア、（８）Ｕｔｉｌｉｔｙはプリンタの環境設定やヘッド交換などを行うユーティリティーソフトウエアである。以上のソフトウエアが（１）のＩｎｓｔａｌｌｅｒによりシステムに設定され実行可能となる。
【０２０５】
図３１は、ウィンドウズ９５環境下における、ウィンドウズ・アプリケーションからＬＰＴポートにつながるプリンタへ出力する場合の、ソフトウェア処理手順を示す。図４０において、４００１は印刷機能を有するウィンドウズアプリケーション、４００２はプリンティング・サブシステム、４００３はスプーリング・サブシステム、４００４はＶＣＯＭＭ、４００５はポート・ドライバ、４００６はＬＰＴポートであり、４００１〜４００５の動作はすべて、ウィンドウズ・システムの指令を受ける。
【０２０６】
印刷機能をもつ一般的なウィンドウズ・アプリケーション４００１から出力されたデータは、プリンティング・サブシステム４００２に送られ、ウィンドウズ・オペレーティング・システムにおけるグラフィックデバイスのハードウェアに対するインターフェースでいるＧＤＩと連動してプリンタドライバが出力し、印刷用データ（コントロールコード）に変換される。さらにスプーリング・サブシステム４００３に送られ、スプーラープロセスが印刷用データ（コントロールコード）をスプールファイルに蓄え、ＶＣＯＭＭ４００４に対して書き出す。ＶＣＯＭＭ４００４はＬＰＴポート・ドライバ４００５を通じて、物理的なＬＰＴポート４００６に印刷用データ（コントロールコード）を書き出す。
【０２０７】
本発明では、Ｗｉｎｄｏｗｓ９５環境下で動くリアルタイムＯＳを使用する。ＲＴＯＳは、ＣＰＵ動作モードのリング０でリアルタイム環境を作り、そこで複数のシグナル・プロセッシング・タスクを実行することが出来る。ＲＴＯＳタスクとリング３で実行されるウィンドウズアプリケーションとは、ウィンドウ・メッセージを用いて非同期に通信する手段がある。ＲＴＯＳタスクと通信するＷｉｎｄｏｗｓアプリケーションを、Ｗ−ＲＴＯＳホストアプリケーションと呼ぶ。また、ＲＴＯＳタスク間も、非同期に通信する手段を有する。
【０２０８】
図３９は、従来例のウィンドウズ９５環境下における、ＲＴＯＳタスクとウィンドウズ・アプリケーションの通信、またＲＴＯＳタスク間の通信を示す。図３９において、４９０１はＷ−ＲＴＯＳホスト・アプリケーション、４９０２はＷ−ＲＴＯＳホスト・アプリケーションと通信を行うＲＴＯＳタスク、４９０３はＲＴＯＳタスク間の通信を行うＲＴＯＳタスクである。
【０２０９】
ＲＴＯＳタスク４９０２は、データの要求、データ処理の終了等をウィンドウズ・メッセージの形でＷ−ＲＴＯＳホスト・アプリケーション４９０１に通信する。Ｗ−ＲＴＯＳホスト・アプリケーション４９０１は、ＲＴＯＳタスク４９０１の処理開始を通信し、メッセージに応じてデータの送信を行う。
【０２１０】
図３２は、本発明における印刷処理の流れを示す、ソフトウエア・ブロック図である。図４１に示されるように、この印刷システムは、ウィンドウズ・アプリケーション４１０１、プリンティング・サブシステム４１０２、スプーリング・サブシステム４１０３、Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ４１０４、セマフォＡ４１０５、セマフォＢ４１０６、共有メモリ４１０７、Ｗ−ＲＴＯＳホスト・アプリケーション４１０８、ＲＴＯＳタスク４１０９、プリンタ・ポート４１１０により構成される。
【０２１１】
ウィンドウズ９５・オペレーティング・システムの場合、スプーリング・サブシステムは複数のコンポーネントにより構成され、それらのうち、ＶＣＯＭＭと通信しＰｏｒｔ  Ｄｒｉｖｅｒにデータを書き出すコンポーネントとして、Ｐｏｒｔ  Ｍｏｎｉｔｏｒ、Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒがある。本発明においては、印刷用データ（コントロールコード）をスプーリング・サブシステムからフックするために、独自のＬａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ４１０４を作成し、スプーリング・サブシステム４１０３に追加する。
【０２１２】
Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ４１０４はいくつかの関数をエクスポートするが、双方向のプリンタを考慮しない場合、印刷用データ（コントロールコード）を処理するとき、ウィンドウズ９５・システムは、ＳｔａｒｔＤｏｃＰｏｒｔ→ＷｒｉｔｅＰｏｒｔ（複数回）→ＥｎｄＤｏｃＰｏｒｔの様にＬａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒの関数を呼び出す。
【０２１３】
図３１で示したのと同様に、印刷機能をもつ一般的なウィンドウズ・アプリケーション４１０１から出力されたデータは、プリンティング・サブシステム４１０２で処理され、スプーリング・サブシステム４１０３に送られる。スプーリング・サブシステム４１０３を構成するコンポーネントの一つで、今回新たに追加したＬａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ４１０４において印刷用データ（コントロールコード）を処理する際、まず図３３の動作が行われる。ＳｔａｒｔＤｏｃＰｏｒｔ０命令がコールされ、図３３のステップ４２０１、４２０２においてセマフォＡ４１０５とセマフォＢ４１０６が作成される。次にステップ４２０３において共有メモリ４１０７がアロケートされる。さらにステップ４２０４において、Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ４１０４の子プロセスとして、ＷｉｎＳＰＯＸホスト・アプリケーション４１０８が生成される。最後にステップ４２０５においてＰｏｒｔ  ＭｏｎｉｔｏｒのＳｔａｒｔＤｏｃＰｏｒｔ０命令をコールする。
【０２１４】
図３３のステップ４２０４で子プロセスとして生成されたＷ−ＲＴＯＳホスト・アプリケーション４１０８は、図３６に示す動作を行う。すなわち、ステップ４５０１においてＲＴＯＳタスク４１０９を起動し、ステップ４５０２において、Ｗ−ＲＴＯＳホスト・アプリケーション４１０８とＲＴＯＳタスク４１０９との通信を初期化し、ステップ４５０３、４５０４においてセマフォＡ４１０５、セマフォＢ４１０６をオープンし、ステップ４５０５においてセマフォＡ４１０５を待つ。
【０２１５】
一方、図３３の動作を行った後、Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ４１０４においては、図３４の動作が行われる。Ｗｒｉｔｅ  Ｐｏｒｔ０命令がコールされ、図３４のステップ４３０１において共有メモリ４１０７がマッピングされ、ステップ４３０２において印刷用データ（コントロールコード）が共有メモリ４１０７に対して書き出される。そしてステップ４３０３においてセマフォＡ４１０５を解放し、ステップ４３０４でセマフォＢを待つ。
【０２１６】
他方、図３６の動作を行った後、Ｗ−ＲＴＯＳホスト・アプリケーション４１０８は、図３７の動作を行う。すなわち、ステップ４６０１において共有メモリ４１０７をオープンし、ステップ４６０２において共有メモリ４１０７をＷ−ＲＴＯＳホスト・アプリケーション４１０８のプロセス空間にマッピングし、ステップ４６０３において、この時点で図３４のステップ４３０２で既に共有メモリ４１０７に対して書き出されている印刷用データ（コントロールコード）を読み出し、ステップ４６０４においてＲＴＯＳタスク４１０９に対してこの印刷用データ（コントロールコード）を書き出す。さらにステップ４６０５においてセマフォＢ４１０６を解放し、ステップ４６０６においてセマフォＡ４１０５を待つ。ＲＴＯＳタスク４１０９において、書き出された印刷用データ（コントロールコード）は、プリンタヘッドイメージに変換され、プリンタ・ポート４１１０に書き出される。
【０２１７】
ウィンドウズ９５・システムは、スプールされたデータがなくなるまで図３４の動作を繰り返す。これにより、図３４、図３７の動作が繰り返されて、一連の印字処理が行われる。
【０２１８】
スプールされたデータがなくなると、ウィンドウズ９５・システムは図３５の動作を行う。ＥｎｄＤｏｃＰｏｒｔ０命令がコールされ、図３５のステップ４４０１、４４０２においてセマフォＡ、Ｂが破棄され、ステップ４４０３において共有メモリが破棄される。最後にステップ４４０４においてＰｏｒｔＭｏｎｉｔｏｒのＥｎｄＤｏｃＰｏｒｔ０命令をコールする。
【０２１９】
図３８は、本発明におけるスキャナ処理の流れを示すソフトウエアブロック図である。
【０２２０】
図３８に示されるように、このスキャナ・システムは、ウィンドウズ・スキャナアプリケーション４７０１、スキャナドライバ４７０２、セマフォＣ４７０３、セマフォＤ４７０４、共有メモリ４７０５、Ｗ−ＲＴＯＳホスト・アプリケーション４７０６、ＲＴＯＳタスク４７０７、スキャナ・ポート４７０８により構成される。
【０２２１】
発明の実施の形態１の図４０で示したのと同様に、スキャナ機能をもつ一般的なウィンドウズ・アプリケーション４７０１がスキャン開始指令を出すと、スキャナ・ドライバ４７０２がセマフォＣ４７０３とセマフォＤ４７０４を作成し、共有メモリ４７０５をアロケートする。そして、スキャナ・ドライバ４７０２の子プロセスとして、Ｗ−ＲＴＯＳホスト・アプリケーション４７０６を生成する。その後、スキャン開始コントロールコードが、ＲＴＯＳタスク４７０７、スキャナ・ポート４７０８を通じてスキャナ装置に出される。
【０２２２】
スキャナ装置から、スキャナ・ポート４７０８を経由したスキャン・データは、ＲＴＯＳタスク４７０７においてバッファリングされ、Ｗ−ＲＴＯＳホスト・アプリケーション４７０６に送られる。
【０２２３】
Ｗ−ＲＴＯＳホスト・アプリケーション４７０６は、共有メモリ４７０５を介し、セマフォＣ４７０３、セマフォＤ４７０４を用いて同期を取り、スキャナ・ドライバ４７０２からウィンドウズ・スキャナ・アプリケーションにスキャン・データを送る。
【０２２４】
図４０はタスクの構成を示す図で、タスクを管理するＴａｓｋ  Ｃｏｎｔｒｏｌと実行されるＴａｓｋから構成される。Ｔａｓｋ  Ｃｏｎｔｒｏｌはタスクの実行、実行順序を管理するＴａｓｋ  Ｄｉｓｐａｔａｃｈｅｒ６０−０１と時間管理を行うＴｉｍｅｒ６０−０２からなる。Ｔａｓｋ  ＣｏｎｔｒｏｌはリアルタイムＯＳ  ＲＴＯＳのシステムの一部で、Ｔａｓｋの管理を行う。Ｔａｓｋはメインの実行を行う親タスクと親タスクから生成される子タスクから構成される。親タスクは３つのフェーズを持ち、タスクの初期化を行うＣｒｅａｔｅ  Ｐｈａｓｅ６０−０３、タスクの本体となるＥｘｅｃｕｔｅ  Ｐｈａｓｅ６０−０４、タスクの終了処理を行うＤｅｌｅｔｅ  Ｐｈａｓｅ６０−０５からなり、Ｃｒｅａｔｅ，Ｅｘｅｃｕｔｅ，Ｄｅｌｅｔｅの順で実行される。子タスクは親タスクから実行時に生成されＴａｓｋ１−Ｔａｓｋｎ６０−０６までのｎ個のタスクを生成することができる。親タスクのＥｘｅｃｕｔｅ  Ｐｈａｓｅと子タスク１−ｎはそれぞれ個別にタスクの順位を表すプライオリティを持つ。これらのタスクは、図３２の４１０９で示される。Ｔａｓｋ  Ｄｉｓｐａｔｃｈｅｒは各タスクのプライオリティに従ってタスクの遷移状態が変わったときにタスク実行の切り換えを行う。Ｔｉｍｅｒは一定の時間間隔で実行されるタスクのために、一定時間ごとに特定のタスクに実行の切り替えを行う。タスクは他のタスクとの間で同期をとるためにセマフォを持ち、セマフォの管理もＴａｓｋ  Ｄｉｓｐａｔｃｈｅｒで行われる。セマフォはタスクで生成されたセマフォに設定される値によりタスクの実行の中断再開を管理することができる。セマフォの値が変更されるのを待つことをセマフォ待ち、セマフォに値を設定することをセマフォ送信と呼ぶ。
【０２２５】
図４１はタスクの遷移関係を示した図で、まずタスクは矢印ｃｒｅａｔｅで生成されＲｅａｄｙ状態となる。Ｒｅａｄｙ状態となったタスクはＴａｓｋ  Ｄｉｓｐａｔｃｈｅｒにより管理されキューに登録される、キューはタスクがＲｅａｄｙ状態にされた順でプライオリティごとに登録し、登録されたタスクの内で最もプライオリティの高いタスクでキューの先頭にあるタスクがＲｕｎｎｉｎｇ状態となる。図中の矢印Ｒｕｎとなる。矢印ｃｈａｎｇｅはＲｕｎｎｉｎｇ状態のタスクを他のタスクに切り換えるためにＲｅａｄｙ状態に切り換える。Ｒｕｎｎｉｎｇ状態のタスクがセマフォ待ちを行い、中断状態になるのが矢印ｗａｉｔでＷａｉｔ状態となる。矢印ｒｅａｄｙはＷａｉｔ状態でセマフォ送信を受けるか、中断が終了することでＷａｉｔ状態からＲｅａｄｙ状態となりタスクのキューの最後に登録される。Ｒｕｎｎｉｎｇ状態のタスクが終了するのが矢印ｅｘｉｔでＴｅｒｍｉｎａｔｅ状態となる。Ｒｅａｄｙ，Ｗａｉｔ状態からタスクを終了するのが矢印ｄｅｌｅｔｅでＴｅｒｍｉｎａｔｅ状態となる。矢印ｃｈａｎｇｅ，ｅｘｉｔ，ｗａｉｔ，ｄｅｌｅｔｅ，ｒｅａｄｙの各状態遷移が起きた場合にＴａｓｋ  Ｄｉｓｐａｔｃｈｅｒにより次のタスクがＲｅａｄｙ状態からＲｕｎｎｉｎｇ状態とされ次のタスクが実行される。Ｔｉｍｅｒで実行に移されるタスクも同じ遷移を行いＲｕｎｎｉｎｇ状態とされる。ただし、Ｔｉｍｅｒの場合には設定された一定時間でタスクの遷移が行われるが、通常のタスクでは矢印ｃｈａｎｇｅ，ｅｘｉｔ，ｗａｉｔ，ｄｅｌｅｔｅ，ｒｅａｄｙの各状態遷移が起きた場合にのみタスクの遷移が実行される。以上のタスクの管理によりタスクの実行、切り換えと、時間によるタスクの実行が行える。
【０２２６】
図４２は、本発明の実施の形態で実行されるタスクを表した図である。図４０のＴａｓｋ−Ｔａｓｋｎに当たる。コントロールコード従って各タスクに遷移を変更するコントロールコード解析Ｔａｓｋ６２−０１、コントロールコード解析Ｔａｓｋにより実行され印字を行う印字処理Ｔａｓｋ５２−０２、スキャナでスキャンを行うスキャン処理Ｔａｓｋ６２−０３、印字ヘッド、スキャンヘッドの交換を行うヘッド交換処理Ｔａｓｋ６２−０４、給紙・排紙を行う給、排紙処理Ｔａｓｋ６２−０５がある。また、Ｔｉｍｅｒにより一定時間ごとに呼び出され各タスクに遷移を変更するタイマー管理Ｔａｓｋ６２−０６、タイマー管理Ｔａｓｋにより実行される印字ヘッドのメンテナンス処理を行う回復系処理Ｔａｓｋ６２−０７、印字・スキャンヘッドの温度管理を行うヘッド温度処理Ｔａｓｋ６２−０８、様々なエラーを処理するエラー処理Ｔａｓｋ６２−０９、電源の状態を管理する電源処理Ｔａｓｋ６２−１０がある。コントロールコード解析Ｔａｓｋ、印字処理Ｔａｓｋ、スキャン処理Ｔａｓｋ、ヘッド交換処理Ｔａｓｋ、給、排紙処理Ｔａｓｋは同じプライオリティを持つ。タイマー管理Ｔａｓｋ、回復系処理Ｔａｓｋ、ヘッド温調処理Ｔａｓｋ、エラー処理Ｔａｓｋ、電源管理Ｔａｓｋは同じプライオリティを持ち、コントロールコード解析Ｔａｓｋ、印字処理Ｔａｓｋ、スキャン処理Ｔａｓｋ、ヘッド交換処理Ｔａｓｋ、給、排紙処理Ｔａｓｋより高いプライオリティを持つ。各タスクの詳細については後述のフローチャートに従って説明する。
【０２２７】
従来のプリンタ装置ではプリンタ装置内の中央演算装置ＣＰＵでこれらとほぼ同等のタスクが実行され、印字が行われていた。本発明では、これらのタスクはホストコンピュータ内の中央演算装置ＣＰＵで実行される。
【０２２８】
図４３はコントロールコードの基本形式を示しており、ＥＳＣはコントロールコードの識別子（１Ｂｈ）でコントロールコードの開始を表す。コントロールコードには、ＥＰＳＯＮ、ＥＳＣＰ、ＨＰ、ＰＣＬ、Ｃａｎｏｎ  ｃｏｌｏｒ  ｎａｔｉｖｅ  ｃｏｍｍａｎｄなどがあり、印字、スキャンを行うための制御指示を行う。次にｃｏｍｍａｎｄでコントロールコードの種類を表す。ｃｏｍｍａｎｄの内容は図４４に示す。ｌｅｎｇｔｈは以降に続くデータのサイズを表し、バイト単位の数値となる。ｌｅｎｇｔｈ＝０は以降に続くデータのないことをを表す。ｄａｔａはイメージデ−タ、モード、フィード量などの指定を行うデータとなる。コントロールコードはアプリケーションから印字・スキャンを行うための各タスクに送られてくる。実施例１でコントロールコードは、図３２のウィンドウ・アプリケーション４１０１、プリンティング・サブシステム４１０２、スプーリング・サブシステム４１０３、Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｅｒ４１０４、共有メモリ４１０７、Ｗ−ＲＴＯＳホスト・アプリケーション４１０８を経て各タスクに渡される。実施例２でコントロールコードは、図７８のウィンドウ・アプリケーション９０−０１、プリンティング・サブシステム９０−０２、スプーリング・サブシステム９０−０３、ＶＣＯＭＭ９０−０８、ＶＣＯＭＭ  Ｐｏｒｔ  Ｄｒｉｖｅｒ９０−０９、ＲＴＯＳ  Ｄｒｉｖｅｒ９０−１０を経て各タスクに渡される。
【０２２９】
図４４に本発明の実施の形態の具体的なコントロールを示す。（１）ＥＳＣ  Ｐ０は印字処理Ｔａｓｋへの切り換えを行うコントロールコード。（２）ＥＳＣＳ０はスキャン処理Ｔａｓｋへの切り換えを行うコントロールコード。（３）ＥＳＣ  Ｅ０は印字・スキャンＴａｓｋの終了コントロールコード。（４）ＥＳＣ  Ｈ  １ｍｏｄｅはヘッド交換指示コントロールコード。ｍｏｄｅ＝０でヘッド交換開始、ｍｏｄｅ＝１でヘッド交換終了。（５）ＥＳＣ  Ｉ０は給紙指示コントロールコード。（６）ＥＳＣ  ００は排紙コントロールコード。（７）ＥＳＣ  ｉｃｏｌｏｒ  ｌｅｎｇｔｈ  ｄａｔａは印字イメージコントロールコードでｃｏｌｏｒは色の指定を表し、Ｋ＝ブラック、Ｃ＝シアン、Ｍ＝マゼンタ、Ｙ＝イエローを指示し以降のデータの色がｃｏｌｏｒで決まる。ｌｅｎｇｔｈがデータのサイズを表す。ｄａｔａがイメージのデータで、１バイトは８ビット、１ビットが１ドットを表す。このコントロールコードはラスタイメージのコントロールコードでラスタ単位で各色のラスタデータを指定する。（８）ＥＳＣｓ０はラスタスキップコントロールコードで１ラスタ分ラスタ位置を下へ更新する。（９）ＥＳＣｆ２ｆｅｅｄはフィードを指定するコントロールコードで、ｆｅｅｄにフィード量を指定する。
【０２３０】
図４５に１ラスタ分のイメージデータとラスタスキップコントロールコードを連続して送る場合の例を示している。４色分のラスタデータのイメージコントロールコードとラスタスキップコントロールコードで１ラスタ分のイメージが出来る。この順でイメージデータを１ページ分繰り返し送ることにより１ページのカラー印字を行う。
【０２３１】
図４６は、印字ヘッド図１１の２のノズル部分の概略構成を示した図である。符号（Ａ）はカラーインクジェットヘッド、（Ｂ）はモノクロインクジェットヘッドを示している。カラーヘッド（Ａ）は、三色のカラーヘッド部分とブラックヘッドの部分からなり、上からイエロー（Ｙ）、マゼンタ（Ｍ）、シアン（Ｃ）、ブラック（Ｂｋ）の順で並び、三色は２４ドット、ブラックは６４ドットから成り、それぞれの色の間は色の干渉を防ぐために８ドットづつの間隔が取られている。インクジェットのヘッドでは１ドットごとに一本のノズルが配置されており、この場合では１ドットは１／３６０ＤＰＩ（ドット／インチ）の分解能を持つ。カラーデータの印字は四色のインクジェットヘッドからそれぞれの色のインクを噴出して行い、それぞれのインクの色の重なりによりインクジェットヘッドにない色の印字も可能となる。ブラックインクジェットのヘッド部分はモノクロの印字に使われる。モノクロインクジェットヘッド（Ｂ）はモノクロ専用印字のインクジェットヘッドでブラックインクジェットヘッドだけで構成される。モノクロインクジェットヘッドは１２８ドットで構成され、一度の印字で１２８ドットの全てのインクジェットヘッドを使うことが出来る。
【０２３２】
図４７〜５３は図４５で示したイメージコントロールコードのイメージデータを蓄え加工するためのバッファを示した図である。図４７から図５１までのバッファは横方向５７６０ドット分のドット幅を持ち、本実施例では横方向の分解能が７２０ＤＰＩ（ドット／インチ）であり、横方向は５７６０／７２０で８インチの幅が印字領域となる。図５２は８インチ＋αの幅を持つ。図４７から図４９までのバッファはイメージをラスタイメージとして保持する。図５０から図５２はラスタイメージデータを縦横変換したカラムイメージとして保持する。ＹＭＣＫは各色に対応し、ラスタ数はバッファの保持できるラスタ数を表す。ドット数は縦横変換後の縦ドット数を表し、たとえば２４ドットは３バイトとなる。図５３にラスタとカラムのデータの配置を示す。ラスタでは１バイト（８ドット）単位のデータが横方向に１＞２＞３＞４＞…＞ｎの順でバッファに保持され、カラムでは１バイト（８ドット）単位のデータが縦方向に１＞２＞３＞４＞…＞ｎの順でバッファに保持される。これは縦２４ドットの場合である。
【０２３３】
図４７はラスタイメージデータを８ラスタ単位で蓄えるためのバッファ。図４８は図４７で蓄えられたラスタイメージデータを２回分蓄えるバッファで、後で説明するイメージデータを加工するために使用され１６ラスタ分の大きさを持つ。図４７で蓄えられたデータが８ラスタ分一杯になると、図４８のバッファへ送られる。図４８のバッファにまだデータがセットされていない場合図４７のバッファは図４８のバッファの前半８ラスタに送られ、すでに図４８の前半８ラスタにデータがセットされていれば図４８のバッファの後半８ラスタにセットされる。図４９は図４８に蓄えられた加工されたデータを印字に従って保持するバッファである。印字ヘッドは図４６の（Ａ）に示したように一番下にブラック、シアン、マゼンタ、イエローの順で配置されているため、上に配置される色ほど後から印字されるためデータを多く蓄える必要がありＫ＜Ｃ＜Ｍ＜Ｙの順でバッファのラスタ数も多くなる。印字方法については後述する。図４８のバッファから図４９のバッファへは図４８のバッファの前半８ラスタが送られ、図４８のバッファは後半８ラスタが前半に移動される。これは、図４８のバッファで行われる加工処理が１６ラスタ単位で行われるためで、加工の終了した図４８の前半８ラスタが図４９へ送られる。図５０は図４９で蓄えられたラスタデータを印字ヘッドに合わせた形で縦横変換したカラムデータを蓄えるバッファである。図５０の形式のデータを図４６の（Ａ）で示した印字ヘッドに送ることで印字が出来る。図４９のバッファから図５０のバッファへは図４９のＫバッファに２４ラスタ蓄わえられた時点で行われる。図５１は図５０で作り出された印字ヘッドに対応したデータに印字パスの処理を行うためのバッファである。印字パスとは複数回印字イメージを重ねて印字する（ファイン印字）、印字データを間引いて印字する（ドラフト印字）などを行うことで、本発明の実施の形態では重ね合わせ、間引きを行わない（ハイクオリティ印字）を印字方法としているので図５０のバッファと図５１は同じデータとなる。図５２は図５１で印字パス処理を実施されたデータに対して印字補正処理を行うバッファである。印字バッファの処理補正は印字ヘッド特有の補正を行う処理で、本発明の実施の形態では印字ヘッドは図４６で示したように縦一列で一直線に構成されているが、印字ヘッドが斜めに配置されているようなヘッドではヘッドの斜行に合わせて印字データをずらす（分散斜め打ち処理）処理、また印字ヘッドが複数列で構成されている場合に各々ヘッドにデータを対応させる処理などがある。図５２はこれら処理を行ったデータを蓄えるために図５１のバッファに処理用の領域を＋αしている。図５２でできあがったデータが印字ヘッドに送られ印字が行われる。
【０２３４】
図５４はハイクオリティ印字の場合の印字パスを示した図で、（１）から（１５）までの印字パスと示している。（２）から（１５）までのパスは図を見やすくするために右にずらして図示しているが、実際の印字では（１）と同じ横位置に印字される。（１）から（１５）は印字ヘッドに対応している。印字パス（１）ではブラックインクジェットヘッドの下から２４ドットで１、２、３のブラックデータを印字している。１、２、３…の数字で表されているのは８ドット単位（１バイト）である。ブラックヘッドの残り４０ドット（常にイメージデータなし）と他の三色ではイメージデータなし（ヌルデータ）、結果としてバンドｂ１にブラック（１）、（２）、（３）のみ印字される。このブラックデータは図５６のＫバッファの（１）、（２）、（３）当たり、他三色はＣ、Ｍ、Ｙバッファの（−）、（−）、（−）に当たる。図５６のカッコ内の数字は実際に設定されているデータを意味し、−はイメージデータがヌルデータであることを示している。次に２４ドットのフィードを行い、印字パス（２）で図５６のＫバッファの（４）、（５）、（６）のデータを印字する。バンドｂ２のブラックが印字される。同様に繰り返して印字パス（４）でシアンのインクジェットヘッド位置がバンドｂ１に到達し、（Ａ）、（Ｂ）、（Ｃ）のブラックデータと（１）、（２）、（３）のシアンデータを印字する。図５６のＣバッファのＡ，Ｂ，Ｃにセットされているイメージデータ（１）、（２）、（３）を印字する。印字パス（５）でマゼンタのインクジェットエッド位置がバンドｂ１の２／３に到達し、（Ｄ）、（Ｅ）、（Ｆ）のブラックデータと（４）、（５）、（６）のシアンデータと（−）、（１）、（２）のマゼンタデータを印字する。図５６のＣバッファのＤ、Ｅ、Ｆにセットされているイメージデータ（４）、（５）、（６）とＭバッファのＤ、Ｅ、Ｆにセットされているイメージデータ（−）、（１）、（２）を印字する。印字パス（６）でイエローのインクジェットヘッド位置がバンドｂ１の１／３に到達し、（１０）、（１１）、（１２）のブラックデータと（７）、（８）、（９）のシアンデータと（３）、（４）、（５）のマゼンタデータと（−）、（−）、（１）のイエローデータを印字する。図５６のＣバッファの１０、１１、１２にセットされているイメージデータ（７）、（８）、（９）とＭバッファの１０、１１、１２にセットされているイメージデータ（３）、（４）、（５）とＹバッファの１０、１１、１２にセットされているイメージデータ（−）、（−）、（１）を印字する。印字パス（７）で（１３）、（１４）、（１５）のブラックデータと（Ａ）、（Ｂ）、（Ｃ）のシアンデータと（６）、（７）、（８）のマゼンタデータと（２）、（３）、（４）のイエローデータを印字する。図５６のＣバッファの１３、１４、１５にセットされているイメージデータ（Ａ）、（Ｂ）、（Ｃ）とＭバッファの１３、１４、１５にセットされているイメージデータ（６）、（７）、（８）とＹバッファの１３、１４、１５にセットされているイメージデータ（２）、（３）、（４）を印字する。印字バンドに印字ヘッドが到達するまではヌルデータが印字され、結果として印字が行われないことになる。
【０２３５】
図５４の印字パス（７）が終了してバンドｂ１は、４色ともに印字されたことになる。バンドｂ１とバンドｂ２の１／３は、カラー印字が完全に終了したことになる。同様に印字パスとフィードを繰り返すことにより、印字パス（１４）まで終了するとバンドｂ８までの印字が完成する。
【０２３６】
図５５は図４９にイメージデータがセットされた状態を示した図である。図中ＫＳＰはＫデータセットポインタの開始位置を示し、ＣＳＰはＣデータセットポインタの開始位置を示し、ＭＳＰはＭデータセットポインタの開始位置を示し、ＹＳＰはＹデータセットポインタの開始位置を示す。ＫＳＰはＫバッファの先頭を示し、ＣＳＰ，ＭＳＰ，ＹＳＰは各バッファの最終から２４ラスタの前の位置を示している。イメージデータのセットはこれら４つのポインタの示す先に行われる。８ラスタ単位で１から順にセットされバッファの最終までセットされると各データセットポインタはバッファの先頭に戻され、バッファが繰り返し利用される。Ｃ、Ｍ、Ｙの各バッファではバッファ先頭からＣＳＰ、ＭＳＰ，ＹＳＰの初期位置まではヌルデータがあらかじめセットされている。図４８にセットされたイメージデータは８ラスタ単位で取り出され、図５５のバッファにセットされる。
【０２３７】
図５６は図５５にセットされたイメージデータを取り出して図５０のバッファにセットするために図４９のバッファからデータを取り出す順序を示した図で、図中ＫＧＰはＫデータゲットポインタの開始位置を示し、ＣＧＰはＣデータゲットポインタの開始位置を示し、ＭＧＰはＭデータゲットポインタの開始位置を示し、ＹＧＰはＹデータゲットポインタの開始位置を示す。イメージデータの取り出しは各ポインタの指し示す先から行われる。ＫバッファからはＫＧＰ、ＣバッファからはＣＧＰ、ＭバッファからはＭＧＰ、ＹバッファからはＹＧＰのそれぞれ指し示す先からデータが取り出され、図５４の印字パス（１）では図５６の１、２、３がそれぞれ取り出される。バッファの設定内容は図５５で示されており、Ｃ、Ｍ、Ｙの各色では１、２、３のイメージデータにヌルデータがセットされており、イメージデータの取り出しではこのヌルデータが取り出される。（−）はヌルデータを表している。Ｃバッファでは１−９、Ｍバッファでは１−Ｄ、Ｙバッファでは１−１１までがヌルデータとなる。
【０２３８】
図５７はポインタとカウンタを示した図で、ＫＳＰ７１−０１はＫデータバッファにイメージデータをセットする位置を示すポインタで、ＣＳＰ７１−０２はＣデータバッファにイメージデータをセットする位置を示すポインタで、ＭＳＰ７１−０３はＭデータバッファにイメージデータをセットする位置を示すポインタで、ＹＳＰ７１−０４はＹデータバッファにイメージデータをセットする位置を示すポインタ。ＫＧＰ７１−０５はＫデータバッファからイメージデータを取り出す位置を示すポインタで、ＣＧＰ７１−０６はＣデータバッファからイメージデータを取り出す位置を示すポインタで、ＭＧＰ７１−０７はＭデータバッファからイメージデータを取り出す位置を示すポインタで、ＹＧＰ７１−０８はＹデータバッファからイメージデータを取り出す位置を示すポインタ。ＲＣＮＴ７１−０９はＫＳＰが示す位置にイメージデータがセットされるごとにカウントアップされ、イメージデータが取り出されることでクリアされる。取り出しに必要なイメージデータがセットされたかどうかを判定するために使用される。これらの領域は図２のＲＡＭ５２に配置される。
【０２３９】
以下、フローチャートに従って本実施例のシステム動作を詳細に説明する。なお、以下に述べるフローチャートに示す手順は、ホストコンピュータの中央演算装置ＣＰＵにおいて実行される。
【０２４０】
図５８は図４２に示したコントロールコード解析Ｔａｓｋ６２−０１を詳細に説明するフローチャートで、まずステップＳ２０１でコントロールコード取得を行う。コントロールコード取得は発明の実施の形態１では図３２の４１０８のＷ−ＲＴＯＳホスト・アプリケーションからコントロールコードを受け取る。また発明の実施の形態２では図７８の９０−０９のＶＣＯＭＭ  Ｐｏｒｔ  Ｄｒｉｖｅｒから９０−１０のＲＴＯＳ  Ｄｒｉｖｅｒを経てコントロールコードを受け取る。
【０２４１】
コントロールコードを受け取るとステップＳ２０２へ進み、印字コントロールコードかどうかのチェックを行う。印字コントロールコードは図４４の（１）で示したコントロールコードでステップＳ２０２はこのコントロールコードとの比較を行う。ステップＳ２０２で印字コントロールコードであればステップＳ２０３へ進み、印字Ｔａｓｋへセマフォを送信する。次にステップＳ２１０へ進みタスクの終了待ちとなる。各タスクは自分の処理が終了するとき終了のセマフォを送信する。ステップＳ２１０で待ち状態となっているコントロールコード解析タスクはステップＳ２０１へ進む。ステップＳ２０２で印字コントロールコードでない場合ステップＳ２０４へ進み、スキャンコントロールコードかどうかのチェックを行う。スキャンコントロールコードは図４４の（２）で示したコントロールコードでステップＳ２０４はこのコントロールコードとの比較を行う。ステップＳ２０４でスキャンコントロールコードであればステップＳ２０５へ進み、スキャンＴａｓｋへセマフォを送信する。次にステップＳ２１０へ進みタスクの終了待ちとなる。ステップＳ２０４でスキャンコントロールコードでない場合ステップＳ２０６へ進み、ヘッド交換コントロールコードかどうかのチェックを行う。ヘッド交換コントロールコードは図４４の（４）で示したコントロールコードでステップＳ２０６はこのコントロールコードとの比較を行う。ステップＳ２０６でヘッド交換コントロールコードであればステップＳ２０７へ進み、ヘッド交換Ｔａｓｋへセマフォ送信する。次にステップＳ２１０へ進みタスクの終了待ちとなる。ステップＳ２０６でヘッド交換コントロールコードでない場合ステップＳ２０８へ進み、給・排紙コントロールコードかどうかのチェックを行う。給・排紙コントロールコードは図４４の（５）、（６）で示したコントロールコードでステップＳ２０８はこのコントロールコードとの比較を行う。ステップＳ２０８で給・排紙コントロールコードであればステップＳ２０９へ進み、給・排紙Ｔａｓｋヘセマフォを送信する。次にステップＳ２１０へ進みタスクの終了待ちとなる。給・排紙コントロールコードでない場合ステップＳ２０１へ進みコントロールコード取得となる。以上の処理によりコントロールコードを取得しコントロールコードの内容に対応したタスクへセマフォを送信し各タスクの終了セマフォ待ちとなりコントロールコード解析ＴａｓｋがＲｕｎｎｉｎｇ状態からＷａｉｔ状態となる。Ｔａｓｋ  Ｄｉｓｐａｔｃｈｅｒによりコントロールコード解析Ｔａｓｋがセマフォを送信したタスクがＲｕｎｎｉｎｇ状態となる。
【０２４２】
図５９は図４２に示した印字処理Ｔａｓｋ６２−０２を詳細に説明するフローチャートで、まずステップＳ２２１で初期化を行う。初期化では図４７〜図５３で示したバッファの確保、初期化、図５７で示したポインタの初期設定、キャリッジ初期化動作（図２３で説明）を行う。次にステップＳ２２２へ進み、印字のセマフォ待ちとなる。印字処理Ｔａｓｋは印字に対するセマフォが送信されるまでステップＳ２２２で待ち状態となる。印字セマフォは図５８で説明したコントロールコード解析ＴａｓｋのステップＳ２０２で印字コントロールコードを解釈し、ステップＳ２０３で送信される。それまで印字処理ＴａｓｋはステップＳ２２２で待ち状態となる。これは図４１で説明したＷａｉｔ状態からＲｅａｄｙ状態を経てＲｕｎｎｉｎｇ状態にタスクの状態が変化したことを表している。印字セマフォが送信されるとステップＳ２２３へ進み印字コントロールコードの取得となる。印字コントロールコード受け取ると印字コントロールコードを解析するためにステップＳ２２４へ進みイメージコントロールコードかどうかのチェックを行う。イメージコントロールコード図４４の（７）であればステップＳ２２５へ進みイメージ展開処理を実行する。イメージ展開処理は送られてきたイメージデータをバッファに展開し、データが整ったところでプリンタ部へ送る処理を行う。イメージ展開処理は図６０で詳細に説明する。ステップＳ２２５で１ラスタ分のイメージデータが処理されると、ステップＳ２２３へ戻り次のコントロールコード取得となる。ステップＳ２２４でイメージコントロールコードでなければステップＳ２２６へ進み、フィードコントロールコードかどうかのチェックを行う。フィードコントロールコード図４４の（９）であればステップＳ２２７へ進み、フィード処理を行う。フィード処理はフィードモーターを回して紙をフィードする処理を行う。フィード処理は図６３で詳細に説明する。フィード処理が行われて紙のフィードが実行されると、ステップＳ２２３へ戻り次のコントロールコード取得となる。ステップＳ２２６でフィードコントロールコードでなければステップＳ２２８へ進み、給・排紙コントロールコードかどうかのチェックを行う。給・排紙コントロールコード図４４の（５）、（６）であればステップＳ２２９へ進み、給・排紙処理を行う。給・排紙処理は新しい紙の給紙、あるいは紙の排紙を行う処理で、給・排処理は図６４で詳細に説明する。給・排紙処理が行われて紙の給紙、排紙が実行されると、ステップＳ２２３へ戻り次のコントロールコード取得となる。ステップＳ２２８で給・排紙コントロールコードでなければステップＳ２３０へ進み、終了コントロールコードかどうかのチェックを行う。終了コントロールコード図４４の（３）でなければ、ステップＳ２２３へ戻り次のコントロールコード取得となる。ステップＳ２３０で終了コントロールコード図４４の（３）であればステップＳ２３１へ進み、印字処理の終了を通知する終了セマフォを送信し印字処理Ｔａｓｋは終了となる。この終了により図４１のＲｕｎｎｉｎｇ状態にあった印字タスクがＷａｉｔ状態に変化することを意味している。これら一連の処理によりイメージデータが展開され印字が行われる。
【０２４３】
図６０は図５９のステップＳ２２５を詳細に説明するフローチャートで、ステップＳ２４１でコントロールコードの所得を行う。イメージ展開処理はコントロールコード図４４の（７）あるいは（８）の場合に呼び出される。次にステップＳ２４２へ進み、取得したコントロールコードがイメージコントロールコード図４４（７）どうかをチェックする。イメージコントロールコードであればステップＳ２４３へ進み、ラスタデータのセットを行う。ラスタイメージデータは図４４の（７）に示したように４つの色に区別され、それぞれの色に対応したバッファにセットされる。セットされるバッファは図４７のバッファでそれぞれ４色Ｙ、Ｍ、Ｃ、Ｋのバッファを８ラスタ分ずつ持っている。８ラスタ中の図５７に示したラスタカウントＲＣＮＴに設定されている値のラスターにイメージデータがセットされる。イメージデータのセットが終わると戻りとなる。ステップＳ２４２でイメージコントロールコードでなければステップＳ２４４へ進みラスタスキップコントロールコードかどうかのチェックを行う。ラスタスキップコントロールコードは図４４の（８）で示され、このコントロールコードによりラスタ位置を１ラスタ分先へ進める。ラスタスキップコントロールコードでなければ戻りとなる。ラスタスキップコントロールコードであれば、ステップＳ２４５へ進みデータの切り出しを行うかどうかのチェックを行う。データの切り出しを行うがどうかのチェックは図４９のバッファにＫデータが２４ラスタ分新たにセットされたかどうかで行われ、データがセットされた場合イメージの切り出し可能となる。これは図５５のＫデータセットポインタＫＳＰがデータのセットにより図５５では１、２、３あるいは４、５、６のように８ラスタデータが３個分Ｋのバッファにセットされたかどうかでチェックされる。ステップＳ２４５でデータ切り出し可能でなければ、ステップＳ２４６へ進みラスタカウントＲＣＮＴが８ラスタかどうかをチェックする。８ラスタになっていなければステップＳ２４７へ進みラスタカウントＲＣＮＴを１カウントアップし戻りとなる。ステップＳ２４６で８ラスタとなればステップＳ２４８へ進み８ラスタ分のバッファ図４７から図４８へデータの転送を行う。図４８のバッファは１６ラスタ分の大きさを持ち、図４７のバッファ２つ分の大きさとなる。はじめ図４７のバッファのデータは図４８のバッファの前半の８ラスタにセットされる。次のデータのセットの際には１６ラスタの後半にセットされる。次にステップＳ２４９へ進み図４８のバッファの後半にデータが転送されたかどうかをチェックする。後半への転送が行われていなければステップＳ２５２へ進みラスタカウントＲＣＮＴをクリアして戻りとなる。ステップＳ２４９で後半へのデータ転送が行われていれば、ステップＳ２５０へ進みイメージ加工の処理を行う。イメージ加工の処理は、図４８のバッファにセットされた１６ラスタのデータの前半８ラスタに対して行われ、各４色の色データの配置によりイメージデータの変換を行う処理を示している。これら処理はたとえば境界検知処理と呼ばれ隣接する黒データをシアン、マゼンタ、イエローデータに置き換える事によりイメージデータの濃度を下げインクのべたつきを防ぐ処理である。これらの処理を送られてきた元データに対して行いデータの加工を行った後のデータを以降の処理に用いる。次にステップＳ２５１へ進みステップＳ２５０で作り出されたデータをイメージ展開用のバッファ図４９へ転送する。データの転送は図４８のバッファの前半８ラスタが図４９のバッファに送られる。バッファにセットされる位置は図５５のＫデータセットポインタＫＳＰ、ＣデータセットポインタＣＳＰ、ＭデータセットポインタＭＳＰ、ＹデータセットポンタＹＳＰのそれぞれの色に対応した位置で行われ、図５５の一つの番号分のラスタデータが図４８の前半から図４９のバッファへ転送される。転送後の図４８のバッファは後半の８ラスタデータが前半に転送される。以降図４８のバッファには後半のデータが図４７のバッファからセットされる。次にステップＳ２５２へ進みラスタカウントＲＣＮＴをクリアして戻りとなる。ステップＳ２４５でデータ切り出し可能であればステップＳ２５３へ進みイメージの切り出し処理を実行する。イメージの切り出し処理はステップＳ２５１でセットされたイメージデータを印字ヘッドに必要とされる分だけ図４９のバッファから取り出してくる処理で、それは図５６に示したＫデータゲットポインタＫＧＰ、ＣデータゲットポインタＣＧＰ、ＭデータゲットポインタＭＧＰ、ＹデータゲットポインタＹＧＰから８ラスタ単位で番号付けされた３個分（２４ラスタ）を取り出すことで行われる。取り出されたデータはラスタデータであり印字ヘッドにセットするデータはカラムデータとなる。このためラスタデータをカラムデータに変換するための縦横変換が行われる。縦横変換されたデータは図５０のバッファにセットされる。黒データは印字ヘッド分の６４ドットが確保されているが切り出されたデータ２４ドットは６４ドットの下から２４ドットにセットされる。黒データの残り４０ドットはクリアされデータはセットされない。次にステップＳ２５４へ進み印字パスの処理を行う。印字パスの処理は図５０にステップＳ２５３で切り出されたデータに対して行われ、処理されたデータが図５１のバッファにセットされる。印字パスの処理は、一つの印字バンドを複数回に分けて印字することにより高精細な印字を行うファイン印字、印字データを間引いて濃度を下げるドラフト印字などがあり、これらの処理は印字データに加工を行うことで実現される。ファイン印字であればあらかじめ決めたファインマスクパターンと元のイメージデータとでＡＮＤ処理を行うことで加工され、ドラフト処理であれば一定のパターンとで間引きを行う。次にステップＳ２５５へ進み印字補正処理を行う。印字補正処理はステップＳ２５４で印字パス処理が行われた図５１のバッファに対して行われ、図５２のバッファに補正処理が実行されたデータがセットされる。印字補正処理には、印字ヘッドが斜めに配置された印字ヘッドを用いる場合、印字ヘッドが複数列に配置されているなどの印字ヘッドに特有の特性を補正する処理がある。本実施例ではヘッドが斜めに配置されている場合で、図５１にセットされたデータを印字ヘッドの斜行した分だけ印字データを逆方向に斜行することを行う。これは印字データをその分だけシフトすることで行いシフトしたデータを図５２にセットする。次にステップＳ２５６へ進み印字制御Ｉ／Ｏコントロールコード作成処理を実行する。印字制御Ｉ／Ｏコントロールコード作成処理はステップＳ２５５で完成した印字イメージの印字ヘッドに対応したデータに印字制御Ｉ／Ｏコマンドを付加することで行う。一連の印字は印字データを印字し２４ドット分のフィードを行い印字ヘッドを元の印字位置へ戻す処理で構成される。詳細は図６１のフローチャートで説明する。次にステップＳ２５７へ進み制御Ｉ／Ｏコマンド転送処理を実行する。制御Ｉ／Ｏコマンド転送処理はステップＳ２５６で完成したイメージデータと印字の制御Ｉ／Ｏコマンドを送信する。詳細は図６２のフローチャートで説明する。次に戻りとなる。
【０２４４】
図６１は図６０のステップＳ２５６を詳細に説明するフローチャートで、印字制御Ｉ／Ｏコマンド作成処理を示している。印字制御Ｉ／Ｏコマンド作成処理は印字のためのキャリッジモーターＣＭを制御して印字イメージデータを印字し、ラインフィードモーターを制御してラインフィードを行い、キャリッジモーターＣＭを印字前の位置に戻す処理を行う。
【０２４５】
まず、ステップＳ２６１でキャリッジモーターＣＭの加速制御Ｉ／Ｏコマンドの作成を行う。ＣＭ加速制御Ｉ／Ｏコマンドは図２７で示した制御Ｉ／Ｏコマンドで、これら制御Ｉ／Ｏコマンドを使用する。印字のためのキャリッジモーターＣＭの制御はキャリッジモーターＣＭを加速し、次に等速として等速時に印字データを印字ヘッドから吐出し、イメージデータを印字後減速する。次にステップＳ２６２でキャリッジモーターＣＭの等速制御Ｉ／Ｏコマンドと図６０ステップＳ２５５で作成されたイメージデータに合わせてキャリッジモーターＣＭの等速制御と印字ヘッドの吐出制御の制御Ｉ／Ｏコマンドを作成する。ＣＭ等速制御Ｉ／Ｏコマンドは図２６で示した制御Ｉ／Ｏコマンドで、これら制御Ｉ／Ｏコマンドを使用しイメージデーターにヒートデータレジスタ制御Ｉ／Ｏコマンド３２ｘｘ（図１８）ｘｘはイメージデータを付加し、ヒート・スキャン駆動トリガ（図１８）３００１を付加することで印字イメージを含んだＣＭ等速制御Ｉ／Ｏコマンドを作成する。次にステップＳ２６３でキャリッジモーターＣＭの減速制御Ｉ／Ｏコマンドを作成する。ＣＭ減速制御Ｉ／Ｏコマンドは図２９で示した制御Ｉ／Ｏコマンドで、これら制御Ｉ／Ｏコマンドを使用する。ステップＳ２６１〜Ｓ２６３でキャリッジモーターＣＭの印字制御Ｉ／Ｏコマンドが作成される。
【０２４６】
次にステップＳ２６４でラインフィードモーターＬＦの加速制御Ｉ／Ｏコマンドを作成する。ＬＦ加速制御Ｉ／Ｏコマンドは図２８で示した制御Ｉ／Ｏコマンドで、これら制御Ｉ／Ｏコマンドを使用する。次にステップＳ２６５でラインフィードモーターＬＦの等速制御Ｉ／Ｏコマンドを作成する。ただし、２４ドットのフィードを行う場合には、等速制御Ｉ／Ｏコマンドはない。次にステップＳ２６６でラインフィードモーターＬＦの減速制御Ｉ／Ｏコマンドを作成する。ＬＦ減速制御Ｉ／Ｏコマンドは図３１で示した制御Ｉ／Ｏコマンドで、これらコマンドを使用する。ステップＳ２６４〜Ｓ２６６でラインフィードモーターＬＦで２４ドットのフィードを行う分のフィード制御Ｉ／Ｏコマンドが作成される。
【０２４７】
次にステップＳ２６７でキャリッジモーターＣＭの加速制御Ｉ／Ｏコマンドを作成する。ＣＭ加速制御Ｉ／Ｏコマンドは図２５で示した制御Ｉ／Ｏコマンドで、これら制御Ｉ／Ｏコマンドを使用する。次にステップＳ２６８でキャリッジモーターＣＭの等速制御Ｉ／Ｏコマンドを作成する。ＣＭ等速制御Ｉ／Ｏコマンドは図２６で示した制御Ｉ／Ｏコマンドで、これら制御Ｉ／Ｏコマンドを使用する。次にステップＳ２６９でキャリッジモーターＣＭの減速制御Ｉ／Ｏコマンドを作成する。ＣＭ減速制御Ｉ／Ｏコマンドは図２７で示した制御Ｉ／Ｏコマンドで、これら制御Ｉ／Ｏコマンドを使用する。ステップＳ２６７〜Ｓ２６９でキャリッジモーターＣＭの戻り制御Ｉ／Ｏコマンドが作成される。戻り制御Ｉ／Ｏコマンドでは印字制御とは逆方向にキャリッジモーターＣＭを動かすためステップＳ２６７にはキャリッジモーターＣＭの方向を逆転する制御Ｉ／Ｏコマンドを含む。以上の処理により印字してラインフィードを行いキャリッジモーターＣＭを元の位置に戻す制御Ｉ／Ｏコマンドが作成される。
【０２４８】
図６２は図６０のステップＳ２５７を詳細に説明するフローチャートで、制御Ｉ／Ｏコマンド送信処理を示している。制御Ｉ／Ｏコマンドの送信処理は図６０ステップＳ２５６で作成された印字制御Ｉ／Ｏコマンドをプリンタ部へ送信するための処理である。まず、ステップＳ２７１でプリンタ部が制御Ｉ／Ｏコマンド受信可能であるかをチェックする。受信可能であるかどうかのチェックは図１０のＢＰＳＴＡＲＴの値をチェックすることで行う。ＢＰＳＴＡＲＴの値が０であれば受信可能となる。受信可能でなければステップＳ２７１を繰り返す。ステップＳ２７１で制御Ｉ／Ｏコマンド受信可能であれば、ステップＳ２７２へ進み、プリンタ部と接続するポートのアドレス制御Ｉ／Ｏコマンドを書き込む。制御Ｉ／Ｏコマンド書き込みのポートは図６の（ｃ）で示されこのポートアドレスにデータを書き込むことで行える。データ書き込み後の図７ＰＲＩＮＴＥＲ  ＭＥＭＯＲＹの詳細を図７２〜図７４に示す。図７２でＰＲＩＮＴＥＲ  ＭＥＭＯＲＹには印字制御（１−１）−（１−３）とラインフィード制御（２−１）−（２−２）と戻り制御（３−１）−（３−３）の制御Ｉ／Ｏコマンドがセットされている。（１−１）は図６１ステップＳ２６１で作成されるＣＭ加速制御Ｉ／Ｏコマンドで、その内容は図２５に示される。（１−２）は図６１ステップＳ２６２で作成される制御Ｉ／ＯコマンドでＣＭ等速と印字イメージを付加したもので図７３で詳細に説明する。（１−３）は図６１ステップＳ２６３で作成されるＣＭ減速制御Ｉ／Ｏコマンドで、その内容は図２７に示される。（２−１）は図６１ステップＳ２６４で作成されるＬＦ加速制御Ｉ／Ｏコマンドで、その内容は図２８に示される。（２−２）は図６１ステップＳ２６６で作成されるＬＦ減速制御Ｉ／Ｏコマンドで、その内容は図２９に示される。（３−１）は図６１ステップＳ２６７で作成されるＣＭ加速制御Ｉ／Ｏコマンドで、その内容は図２５に示される。（３−２）は図６１ステップＳ２６８で作成されるＣＭ等速制御Ｉ／Ｏコマンドで、その内容は図２６に示される。（３−３）は図６１ステップＳ２６９で作成されるＣＭ減速制御Ｉ／Ｏコマンドで、その内容は図２７に示される。（４）は終了制御Ｉ／Ｏコマンドがセットされる。終了制御Ｉ／Ｏコマンドは１０００で図１０のＢＰＥＮＤで制御Ｉ／Ｏコマンドの実行はＢＰＥＮＤで終了する。図７３は図７２の（１−２）の内容を示した図で、図２６の等速制御にイメージのデータを付加して印字を実行するように構成される。第１カラムから第ｎカラムまでの制御を示しており、図中６９０１から６５２８は図２５と同じで３２００＋ｄａｔａの部分がイメージデータを吐出するためにヒートレジスタにデータを送る制御Ｉ／Ｏコマンドとなる。制御Ｉ／Ｏコマンド３２００は図１８のアドレス３２ＨＤＲでヒートデータレジスタである。ヒートデータレジスタは印字のためのヒータレジスタで印字ヘッドに対応する。その詳細は図１３で説明されている。ｄａｔａ（１−１）からｄａｔａ（１−１７）は印字ヘッド１列分のデータでデータの構成は図７４に示す。３２００＋ｄａｔａのつぎの１４０６はデータを送る時間間隔を指定する制御Ｉ／Ｏコマンドで２マイクロセコンドの時��をとる。３２００＋ｄａｔａ（１−１７）の後に１５００，１４Ｅ３で１カラムごとの時間設定を行う。ここまでの時間でインクを吐出する時間をキャリッジの移動時間に合わせる。３１０１は図１８のアドレス３１ＨＤＲＵＮでセットしたイメージデータの吐出を指定する。これで１カラム分の印字制御が構成され、同時にｎカラムまで繰り返すことでｎカラム分の印字が出来る。図７４は印字データの印字位置を表した図で１からｎカラムの印字となる。これは図６０のステップＳ２５５までで作成された印字イメージとなる。制御Ｉ／Ｏコマンド書き込み後ステップＳ２７３へ進み制御Ｉ／Ｏコマンドの実行を指定する。制御Ｉ／Ｏコマンド実行は制御Ｉ／Ｏコマンド制御ポート図６（ａ）で示されこのポートに実行を指示して書き込むことにより行える。これは図１０のＢＰＳＴＡＲＴに１をライトする事で行う。制御Ｉ／Ｏコマンドの実行は図９のタイミングチャートで説明した手順に従って行われる。以上の処理により制御Ｉ／Ｏコマンドのプリンタ部への送信と制御Ｉ／Ｏコマンドの実行が行える。
【０２４９】
図６３は図５９のステップＳ２２７を詳細に説明するフローチャートで、フィード処理を示している。フィード処理はフィードコントロールコード図４４（９）で示されるコントロールコードに対する処理でまずステップＳ２８１でラインフィードモーターＬＦの加速制御Ｉ／Ｏコマンドを作成する。次にステップＳ２８２でラインフィードモーターＬＦの等速制御Ｉ／Ｏコマンドを作成する。等速制御Ｉ／Ｏコマンドは図４４（９）で示されたコントロールコードのｆｅｅｄに設定されている値分の等速が継続するように作成される。次にステップＳ２８３ラインフィードモーターＬＦの減速制御Ｉ／Ｏコマンドを作成する。次に、ステップＳ２８４でプリンタ部が制御Ｉ／Ｏコマンド受信可能であるかをチェックする。受信可能でなければステップＳ２８４を繰り返す。ステップＳ２８４で制御Ｉ／Ｏコマンド受信可能であれば、ステップＳ２８５へ進み、プリンタ部と接続するポートのアドレスに制御Ｉ／Ｏコマンドを書き込む。これは図６２のステップＳ２７２と同様になる。次にステップＳ２８６で制御Ｉ／Ｏコマンド実行を行う。これは図６２のステップＳ２７３と同様になる。以上の処理によりフィードコントロールコードに対する処理が行われフィードが実行される。
【０２５０】
図６４は図５９のステップＳ２２９を詳細に説明するフローチャートで、給・排紙処理を示している。まずステップＳ２９１で給紙コントロールコードあるいは排紙コントロールコードに対する制御Ｉ／Ｏコマンドを作成する。次に、ステップＳ２９２でプリンタ部が制御Ｉ／Ｏコマンド受信可能であるかをチェックする。受信可能でなければステップＳ２９２を繰り返す。ステップＳ２９２で制御Ｉ／Ｏコマンド受信可能であれば、ステップＳ２９３へ進み、プリンタ部と接続するポートのアドレスに制御Ｉ／Ｏコマンドを書き込む。これは図６２のステップＳ２７２と同様になる。次にステップＳ２９４で制御Ｉ／Ｏコマンド実行を行う。これは図６２のステップＳ２７３と同様になる。以上の処理により給紙・排紙に対する処理が行われる。
【０２５１】
以上、図５９から図６４で印字処理について説明した。
【０２５２】
図６５は図４２に示したスキャン処理Ｔａｓｋ６２−０３を詳細に説明するフローチャートで、まず、ステップＳ３０１で初期化を行う。初期化ではバッファの確保、初期化などを行う。次にステップＳ３０２へ進み、スキャンのセマフォ待ちとなる。スキャン処理Ｔａｓｋはスキャンに対するセマフォが送信されるまでステップＳ３０２で待ち状態となる。スキャンセマフォは図５８で説明したコントロールコード解析ＴａｓｋのステップＳ２０４でスキャンコントロールコードを解釈し、ステップＳ２０５で送信される。それまでスキャン処理ＴａｓｋはステップＳ３０２で待ち状態となる。これは図４１で説明したＷａｉｔ状態からＲｅａｄｙ状態を経てＲｕｎｎｉｎｇ状態にタスクの状態が変化したことを表している。印字セマフォが送信されるとステップＳ３０３へ進みスキャンコントロールコードの取得となる。スキャンコントロールコード受けるとスキャンコントロールコードを解析するためにステップＳ３０４へ進みスキャンコントロールコードかどうかのチェックを行う。スキャンコントロールコードは図４４（１０）で示されこのコントロールコードであればステップＳ３０５へ進む。ステップＳ３０５ではスキャンの処理が行われスキャンしたイメージデータをスキャンアプリケーションに戻すことができる。詳細は図６６のフローチャートで説明する。ステップＳ３０６からステップＳ３１１までは図５９の印字処理ＴａｓｋのステップＳ２２６からステップＳ２３１と同様で説明は省略する。
【０２５３】
図６６は図６５のステップＳ３０５を詳細に説明するフローチャートでまずステップＳ３２１でスキャン制御Ｉ／Ｏコマンドの作成を行う。スキャン制御Ｉ／Ｏコマンドはスキャン動作を行うために制御Ｉ／ＯコマンドでキャリッジモーターＣＭを加速し、等速とした後スキャナーヘッドからスキャンデータを読み出して保存するための制御Ｉ／Ｏコマンドをセットし、減速制御Ｉ／Ｏコマンドをセットする。次にスキャンヘッド分のフィードを行い、キャリッジを戻す処理をセットする。次に、ステップＳ３２２でプリンタ部が制御Ｉ／Ｏコマンド受信可能であるかをチェックする。受信可能でなければステップＳ３２２を繰り返す。ステップＳ３２２で制御Ｉ／Ｏコマンド受信可能であれば、ステップＳ３２３へ進み、プリンタ部と接続するポートのアドレスに制御Ｉ／Ｏコマンドを書き込む。これは図６２のステップＳ２７２と同様になる。
【０２５４】
データ書き込み後の図７ＰＲＩＮＴＥＲ  ＭＥＭＯＲＹの詳細を図７５〜図７７に示す。図７５でＰＲＩＮＴＥＲ  ＭＥＭＯＲＹにはスキャン制御（１−１）−（１−３）とラインフィード制御（２−１）−（２−３）と戻り制御（３−１）−（３−３）の制御Ｉ／Ｏコマンドがセットされている。（１−１）は図６１ステップＳ２６１で作成されるＣＭ加速制御Ｉ／Ｏコマンドと同じで、その内容は図２５に示される。（１−２）はスキャン制御Ｉ／ＯコマンドでＣＭ等速とイメージデータ取得制御Ｉ／Ｏコマンドを付加したもので図７６で詳細を説明する。（１−３）は図６１ステップＳ２６３で作成されるＣＭ減速制御Ｉ／Ｏコマンドと同じで、その内容は図２７に示される。（２−１）は図６１ステップＳ２６４で作成されるＬＦ加速制御Ｉ／Ｏコマンドと同じで、その内容は図２８に示される。（２−２）は図６３ステップＳ２８２で作成されるＬＦ等速制御Ｉ／Ｏコマンドと同じで、その内容は図２８に示される。（２−３）は図６１ステップＳ２６６で作成されるＬＦ減速制御Ｉ／Ｏコマンドと同じで、その内容は図２９に示される。（３−１）は図６１ステップＳ２６７で作成されるＣＭ加速制御Ｉ／Ｏコマンドと同じで、その内容は図２５に示される。（３−２）は図６１ステップＳ２６８で作成されるＣＭ等速制御Ｉ／Ｏコマンドと同じで、その内容は図２６に示される。（３−３）は図６１ステップＳ２６９で作成されるＣＭ減速制御Ｉ／Ｏコマンドと同じで、その内容は図２７に示される。（４）は終了制御Ｉ／Ｏコマンドがセットされる。終了制御Ｉ／Ｏコマンドは１０００で図１０のＢＰＥＮＤで制御Ｉ／Ｏコマンドの実行はＢＰＥＮＤで終了する。（５）はスキャンイメージデータ保存エリアでスキャンしたイメージデータを１ライン分スキャンが終了するまで保存する領域である。図７６は図７５の（１−２）の内容を示した図で、図２６の等速制御にイメージデータ取得制御Ｉ／Ｏコマンドを付加してスキャンを実行するように構成される。第１カラムから第２カラムまでの制御を示しており以降同様にｎカラムまで繰り返す。図中６９０１から６５２８は図２５と同じで、３１０１から始まって１５００，１４０４，１３３Ａ，１２００，１３３Ｂ，１２００までが１カラムのスキャンを指示し、スキャンヘッドの２バイト分のデータを取り出してスキャンイメージデータ保存エリアに保存する制御Ｉ／Ｏコマンドとなる。３１０１は図１８のアドレス３１ＨＤＲＵＮでイメージデータの取り込みタイミングを指定する。１３３Ａ，１２００，１３３Ｂ，１２００はスキャンしたイメージデータをイメージデータが格納されているレジスタ３Ａ，３Ｂ（図１８）から図７５（５）のスキャンイメージデータ保存エリアに保存する。
【０２５５】
スキャンされたイメージデータの構成は図７７に示す。１カラムのスキャン動作、１６バイトイメージデータ保存後の１５０２，１４ＣＦで１カラムごとの時間設定を行う。ここまでのトータル時間でスキャンする時間をキャリッジの移動時間に合わせる。これで１カラム分のスキャン制御が構成され、同様にｎカラムまで繰り返すことでｎカラム分のスキャンが出来る。（３）はスキャンデータの構成を表した図で横方向に１からｎカラムで縦１から１６バイトの構成で１２８ドットとなる。
【０２５６】
次にステップＳ３２４で制御Ｉ／Ｏコマンド実行を行う。これは図６２のステップＳ２７３と同様になる。次にステップＳ３２５でプリンタ部へ送った制御Ｉ／Ｏコマンドが実行されてスキャンが終了したかどうかのチェックを行う。終了していなければステップＳ３２５へ戻る。ステップＳ３２５でスキャンが終了すると、ステップＳ３２６へ進み、スキャンしたイメージデータをスキャンアプリケーションへ送信する。スキャンしたイメージデータはプリンタ部に保存されステップＳ３２６でプリンタ部から読み出される。イメージデータの読み出しは図６（ｃ）のポートで行う。図３８にスキャン動作を行うタスクとＷｉｎｄｏｗｓスキャナ・アプリケーションの構成を示す。
【０２５７】
図６５、図６６のスキャン処理よりプリンタ部でスキャンされたイメージデータをスキャンアプリケーションへ送り出すことができる。
【０２５８】
図６７は図４２に示したタイマー管理Ｔａｓｋ６２−０６を詳細に示したフローチャートでタイマー管理Ｔａｓｋは図４０のＴａｓｋ  ＣｏｎｔｒｏｌのＴｉｍｅｒにより一定の時間ごとに呼び出される。ステップＳ３３１で経過時間の算出を行う。タイマー管理Ｔａｓｋは一定時間で呼び出されるため呼び出される回数から経過時間を算出することが出来る。次にステップＳ３３２へ進み回復系処理時間かどうかをチェックする。ステップＳ３３１で算出された時間を基に一定の時間ごとに回復系の処理を実行するためにチェックが行われる。ステップＳ３３２で回復系の処理時間であれば、ステップＳ３３３へ進み回復系処理Ｔａｓｋへセマフォを送信する。次にステップＳ３４０へ進み終了セマフォ待ちとなる。ステップＳ３３２で回復系処理時間でなければステップＳ３３４へ進み、印字ヘッド温調処理時間かどうかをチェックする。ステップＳ３３４で印字ヘッド温調処理時間であれば、ステップＳ３３５へ進み印字ヘッド温調処理Ｔａｓｋへセマフォを送信する。次にステップＳ３４０へ進み終了セマフォ待ちとなる。ステップＳ３３４で印字ヘッド温調処理時間でなければステップＳ３３６へ進み、エラーをチェックする。ステップＳ３３６でエラーがあれば、ステップＳ３３７へ進みエラー処理Ｔａｓｋへセマフォを送信する。次にステップＳ３４０へ進み終了セマフォ待ちとなる。ステップＳ３３６でエラーでなければステップＳ３３８へ進み、電源管理変更をチェックする。ステップＳ３３８で電源管理変更があれば、ステップＳ３３９へ進み電源管理Ｔａｓｋへセマフォを送信する。次にステップＳ３４０へ進み終了セマフォ待ちとなる。次にステップＳ３４１へ進み、タイマー管理Ｔａｓｋの終了セマフォを送信する。
【０２５９】
図６８は図４２の回復系処理Ｔａｓｋ６２−０７の詳細を示したフローチャートで、ステップＳ３５１で初期化を行う。次にステップＳ３５２で回復系処理Ｔａｓｋへのセマフォ待ちとなる。図６７のステップＳ３３３で回復系処理Ｔａｓｋへのセマフォが送信されるとステップＳ３５３へ進み回復系処理へと進む。ステップＳ３５３でキャッピング時間であるかどうかをチェックする。キャッピング時間であるかどうかのチェックは最後に印字した時間からの経過時間で行われ、キャッピング時間であればステップＳ３５４へ進み、キャッピング処理を実行する。キャッピングは印字ヘッドが印字されずに放置され、インクが乾くことを防止するためにキャッピング位置にキャリッジを移動して密閉することでインクの乾燥を防ぐ処理である。印字が連続して行われる場合には、毎回キャッピングすると印字時間が延びるため、最後に印字を行った時点から一定の時間印字が行われなかった場合にキャッピングする。次にステップＳ３６１へ進み、終了セマフォを送信する。ステップＳ３５３でキャッピング時間でなければ、ステップＳ３５５へ進みワイピング時間かどうかのチェックを行う。ワイピング時間かどうかのチェックは前回のワイピング時間からの経過時間で行われ、ワイピング時間であればステップＳ３５６へ進みワイピング処理実行する。ワイピングは印字ヘッドに付着した余分なインクを拭き取る処理である。ワイピング処理は一定の印字時間ごとに行われ、キャリッジをワイピング位置へ移動し、ワイピイングブレードで余分なインクをふき取り、余分なインクによる混色等を防ぐ。次にステップＳ３６１へ進み、終了セマフォを送信する。ステップＳ３５５でワイピング時間でなければ、ステップＳ３５７へ進み予備吐時間かどうかのチェックを行う。予備吐時間かどうかのチェックは前回の予備吐時間からの経過時間で行われ、予備吐時間であればステップＳ３５８へ進み予備吐処理実行する。予備吐は印字ヘッドが目詰まりする事を防止する処理である。予備吐処理は一定の印字時間ごとに行われ予備吐位置へキャリッジを移動し一定量のインクを吐出して、インクがヘッドで目詰まりすることを防ぐ。次にステップＳ３６１へ進み、終了セマフォを送信する。ステップＳ３５７で予備吐時間でなければ、ステップＳ３５９へ進みクリーニング時間かどうかのチェックを行う。クリーニング時間かどうかのチェックは前回のクリーニング時間からの経過時間と印字起動の一回目などで行われ、クリーニング時間であればステップＳ３６０へ進みクリーニング処理実行する。クリーニングは印字ヘッドが目詰まりする事を防止する予備吐処理と印字ヘッドに付着した余分なインクを拭き取るワイピング処理を合わせて行う処理である。クリーニング処理は予備吐処理とワイプ処理を行うことでヘッドのクリーニングが行え、ヘッドを最適な状態に保つ。次にステップＳ３６１へ進み、終了セマフォを送信する。
【０２６０】
図６９は図４２のヘッド温調処理Ｔａｓｋ６２−０８の詳細を示したフローチャートで、ステップＳ３７１で初期化を行う。次にステップＳ３７２でヘッド温調処理Ｔａｓｋへのセマフォ待ちとなる。図６７のステップＳ３３５でヘッド温調処理Ｔａｓｋへのセマフォが送信されるとステップＳ３７３へ進み各ヘッド温調処理へと進む。ステップＳ３７３で装着されているヘッドが印字ヘッドであるかスキャナヘッドであるかどうかをチェックする。ステップＳ３７３でスキャナであれば、ステップＳ３７４へ進みスキャナヘッドの温調処理を実行する。スキャナヘッドの温調処理はスキャナヘッドに搭載されている光源がいつも一定の光量以上で点灯できるようにスキャンヘッドの光源を前もって必要時間分点灯する処理である。次にステップＳ３７６へ進み、終了セマフォを送信する。ステップＳ３７３でスキャナヘッドでない場合、ステップＳ３７５へ進み、印字ヘッド温調処理を行う。印字ヘッド温調処理は印字ヘッドが一定の状態でインクを吐出出来るように印字ヘッドのヒータを前もって暖めたり、印字が連続すると印字ヘッドの温度が上昇し、ヘッドの温度変化に対応した印字ヘッドの温度調整を行う。次にステップＳ３７６へ進み、終了セマフォを送信する。
【０２６１】
図７０は図４２のエラー処理Ｔａｓｋ６２−０９の詳細を示したフローチャートで、ステップＳ３８１で初期化を行う。次にステップＳ３８２でエラー処理Ｔａｓｋへのセマフォ待ちとなる。図６７のステップＳ３３７でエラー処理Ｔａｓｋへのセマフォが送信されるとステップＳ３８３へ進みエラー処理へと進む。ステップＳ３８３でエラーがあるかどうかをチェックする。ステップＳ３８３でエラーであれば、ステップＳ３８４へ進みエラー処理を実行する。エラー処理は各種プリンタのエラーを行う処理で、エラーにはモーター、ヘッド、紙関係などがあり、それらエラーに対する処理を行う。次にステップＳ３８５へ進み、終了セマフォを送信する。
【０２６２】
図７１は図４２の電源管理Ｔａｓｋ６２−１０の詳細を示したフローチャートで、ステップＳ１４０１で初期化を行う。次にステップＳ３９２で電源管理Ｔａｓｋへのセマフォ待ちとなる。図６７のステップＳ３３９で電源管理Ｔａｓｋへのセマフォが送信されるとステップＳ３９３へ進み電源管理処理へと進む。ステップＳ３９３で電源変動があるかどうかをチェックする。ステップＳ３９３で電源変動であれば、ステップＳ３９４へ進み電源管理処理を実行する。電源管理処理はプリンタの電源に関する処理で、電圧の低下など、それら電源変動に対する処理を行う。次にステップＳ３９５へ進み、終了セマフォを送信する。
【０２６３】
以上、図６７から図７１でタイマー管理Ｔａｓｋについて説明したが、一定の時間ごとにタイマー管理Ｔａｓｋが起動され、タイマー管理Ｔａｓｋにより時間の経過に従って行う処理が実行される。
【０２６４】
（実施の形態２）
図７８は本発明の実施の形態の処理を示すブロック図である。
【０２６５】
図中９０−０１はウィンドウズ・アプリケーションであり、９０−０２はウィンドウズ・オペレーティング・システムにおけるプリンティングサブシステムであり、９０−０３はウィンドウズ・オペレーティング・システムにおけるスプーリングサブシステムであり、通常のウィンドウズのプリントシーケンスに従い、印刷用データ（コントロールコード）を生成しスプールファイルに蓄える。
【０２６６】
９０−０５はＷ−ＲＴＯＳホスト・アプリケーションである。Ｗ−ＲＴＯＳホスト・アプリケーション９０−０５は、ＲＴＯＳと通信する機能を有する。通常のウィンドウズ・アプリケーションである。
【０２６７】
９０−０６はＲＴＯＳタスクであり、９０−０７はＤＣＰＥ  Ｐｏｒｔである。ＲＴＯＳタスク９０−０６は、Ｗ−ＲＴＯＳホスト・アプリケーション９０−０５により起動され、発明の実施の形態１ＲＴＯＳタスクと同様に印刷用データ（コントロールコード）をプリンタヘッドイメージ・プリンタ制御Ｉ／Ｏコマンドに変換し、ＤＣＰＥ  Ｐｏｒｔ９０−０７に書き出す。
【０２６８】
９０−０８はウィンドウズ・オペレーティング・システムにおけるＶＣＯＭＭであり、９０−０９はウィンドウズ・オペレーティング・システムにおけるＶＣＯＭＭポートドライバである。ＶＣＯＭＭ９０−０８は通常のウィンドウズのプリントシーケンスに従い、スプーリングサブシステム９０−０３より印刷用データ（コントロールコード）を受け取り、ＶＣＯＭＭポートドライバ９０−０９にこれを引き渡す。
【０２６９】
９０−１０はＲＴＯＳドライバであり、ＲＴＯＳの提供するストリーム入出力（ＳＩＯ）を介してＲＴＯＳタスク９０−０６に印刷用データ（コントロールコード）を引き渡す。ＲＴＯＳタスク及びＲＴＯＳドライバはウィンドウズ環境下で動作するリアルタイムオペレーティングシステムＲＴＯＳの下で動作しており、ＣＰＵ動作モードＲｉｎｇ０で動作している。
【０２７０】
ＶＣＯＭＭ及びＶＣＯＭＭポートドライバはともにウィンドウズ・オペレーティング・システムにおけるＶｘＤであり、ＣＰＵ動作モードＲｉｎｇ０で動作し、構造体ＤＤＢによりシステムに認識される。構造体ＤＤＢには、デバイス名、サービス・エントリーポイントなどが含まれる。ＶＣＯＭＭポートドライバは、ＶＣＯＭＭに対してポートドライバファンクションと呼ばれる関数群を提供し、これらは概ねＶＣＯＭＭのサービスに対応している。スプーリングサブシステムはウィンドウズ・システムＡＰＩを介してＶＣＯＭＭのサービスを呼び出し、ＶＣＯＭＭはサービスに対応するポートドライバファンクションを呼び出して印刷用データ（コントロールコード）を出力する。印刷用データ（コントロールコード）の出力に関係する主なポートドライバファンクションは、Ｐｏｒｔ  Ｏｐｅｎ（ポートのオープン）、Ｐｏｒｔ  Ｃｌｏｓｅ（ポートのクローズ）、Ｐｏｒｔ  Ｓｅｔｕｐ（送受信キューのセットアップ）、Ｐｏｒｔ  Ｗｒｉｔｅ（出力キューへの書込み）、Ｐｏｒｔ  Ｇｅｔ  Ｑｕｅｕｅ  Ｓｔａｔｕｓ（キューの状態の引出し）、などである。通常のウィンドウズのプリントシーケンスにおいては、ＶＣＯＭＭポートドライバは、印刷用データ（コントロールコード）をプリンタが接続された物理ポートに書き出す。本発明の実施の形態においては、ＶＣＯＭＭポートドライバ９０−０９は、印刷用データ（コントロールコード）をＲＴＯＳドライバ９０−１０に引き渡す。
【０２７１】
図７９はＲＴＯＳのストリーム入出力の働きを示すブロック図で、本発明の実施の形態で用いるストリーム入力について説明する。図中９１−０１はＲＴＯＳタスク、９１−０２はＳＩＯ、９１−０３はＲＴＯＳドライバ、９１−０４は空バッファ、９１−０５は入力データが格納されたバッファである。ＲＴＯＳタスク９１−０１はＳＩＯ９１−０２の入力ファンクションＳＩＯ＿ｇｅｔ（）を呼び出し、空バッファをＳＩＯ９１−０２に渡す。ＳＩＯ９１−０２は渡された空バッファを空バッファキューに入れてＲＴＯＳドライバ９１−０３の入力ファンクションＤｘｘ＿ｉｎｐｕｔ（）を呼び出す。ＲＴＯＳドライバ９１−０３は空バッファキューから空バッファを取り出し、このバッファに入力データを格納する。バッファが入力データで満たされるとバッファを入力データバッファキューに入れる。ＳＩＯ９１−０２はＤｘｘ＿ｉｎｐｕｔ（）から戻るとＳＩＯ＿ｇｅｔ（）を終了し入力データバッファキューから入力データが格納されたバッファをＲＴＯＳタスク９１−０１に返す。以下、フローチャートを用いてＲＴＯＳドライバ９１−０３の処理を説明する。
【０２７２】
図８０は、Ｄｘｘ＿ｉｎｐｕｔ（）のフローチャートである。ステップＳ４００で入力ジョブを開始する。入力ジョブは非同期に起動され処理をするので、ＲＴＯＳドライバ９１−０３は同期のためのセマフォを持つ。ステップＳ４０１でこのセマフォがポストされるのを待つ。ポストされると処理を終え戻る。
【０２７３】
図８１は、入力ジョブのフローチャートである。ステップＳ４１０でデバイスから入力しバッファにデータを格納する。本発明の実施の形態においては前述の通りＶＣＯＭＭポートドライバ９０−０９からデータを受け取ることになる。ステップＳ４１１でバッファがフルになったかどうかを判定し、フルでなければ処理を終える。バッファがフルになると、ステップＳ４１２でバッファを入力データバッファキューに入れて、ステップＳ４１３でセマフォをポストする。
【０２７４】
以下、ＶＣＯＭＭポートドライバ９０−０９からＲＴＯＳドライバ９０−１０へのデータの引き渡しについて説明する。
【０２７５】
ＲＴＯＳドライバ９０−１０はＲＴＯＳの提供するファンクションＩＡ＿ａｄｄＤＤＢ（）により、自身の持つ構造体ＤＤＢをウィンドウズ・オペレーティングシステムのＶｘＤ層のＤＤＢチェーンに加えることによりエントリーポイントをエクスポートする。ＶＣＯＭＭポートドライバ９０−０９はウィンドウズの提供するサービスｇｅｔＤＤＢ（）により、ＲＴＯＳドライバ９０−１０のＤＤＢを検索し、エントリーポイントを取得する。ＶＣＯＭＭポートドライバ９０−０９は、前述したポートドライバファンクションＰｏｒｔ  Ｗｒｉｔｅ（出力キューへの書込み）が呼び出されると前記エントリーポイントによりＲＴＯＳドライバ９０−１０を呼び出してＶＣＯＭＭから渡された印刷用データ（コントロールコード）をＲＴＯＳドライバ９０−１０に引き渡す。ＲＴＯＳドライバ９０−１０はこれを入力データとして、前記入力ジョブを行う。
【０２７６】
（実施の形態３）
図８２は本発明の実施の形態の処理を示すブロック図である。
【０２７７】
図中９４−０１はウィンドウズ・アプリケーションであり、９４−０２はウィンドウズ・オペレーティング・システムにおけるプリンティングサブシステム・スプーリングサブシステムであり、９４−０３はウィンドウズ・オペレーティング・システムにおけるプリンタドライバであり、９４−０４はデータ変換タスクであり、９４−０５はウィンドウズ・オペレーティング・システムにおけるＶＣＯＭＭであり、９４−０６はウィンドウズ・オペレーティング・システムにおけるＶＣＯＭＭポートドライバであり、９４−０７はＤＣＰＥ  Ｐｏｒｔである。本発明の実施の形態においても通常のウィンドウズのプリントシーケンスに従い、印刷用データ（コントロールコード）を生成しスプールファイルに蓄える。ただし、プリンタドライバ９４−０３は発明の実施の形態１ＲＴＯＳタスクと同様に処理するデータ変換タスク９４−０４と通信してこれを印刷用データ（コントロールコード）をプリンタヘッドイメージ・プリンタ制御Ｉ／Ｏコマンドに変換し、これをＶＣＯＭＭ、ＶＣＯＭＭポートドライバを介して、ＤＣＰＥ  Ｐｏｒｔに出力する。
【０２７８】
（実施の形態４）
第１の発明の実施の形態では、ホスト部とプリンタ部の間のインターフェイスをＩＳＡバスを介して接続した構成についての説明をしたが、インターフェイスの構造についてはこれに限定されるものではなく、第３の形態としてＩＳＡバスの代わりに汎用の高速インターフェイスとしてＩＥＥＥ１３９４を用いた実施の形態について説明する。
【０２７９】
まず初めにＩＥＥＥ１３９４の技術の概要についての説明を行うと、家庭用デジタルＶＴＲやＤＶＤの登場も伴って、ビデオデータやオーディオデータなどのリアルタイムでかつ高情報量のデータ転送のサポートが必要になっている。こういったビデオデータやオーディオデータをリアルタイムで転送し、パソコン（ＰＣ）に取り込んだり、またはその他のデジタル機器に転送を行うには、必要な転送機能を備えた高速データ転送可能なインタフェースが必要になってくるものであり、そういった観点から開発されたインタフェースがＩＥＥＥ１３９４−１９９５（以下１３９４シリアルバス）である。
【０２８０】
図８３に１３９４シリアルバスを用いて構成されるネットワーク・システムの例を示す。このシステムは機器Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ，Ｇ，Ｈを備えており、Ａ−Ｂ間、Ａ−Ｃ間、Ｂ−Ｄ間、Ｄ−Ｅ間、Ｃ−Ｆ間、Ｃ−Ｇ間、及びＣ−Ｈ間をそれぞれ１３９４シリアルバスのツイスト・ペア・ケーブルで接続されている。この機器Ａ〜Ｈは例としてＰＣ、デジタルＶＴＲ、ＤＶＤ、デジタルカメラ、ハードディスク、モニタ等である。各機器間の接続方式は、ディジーチェーン方式とノード分岐方式とを混在可能としたものであり、自由度の高い接続が可能である。
【０２８１】
また、各機器は各自固有のＩＤを有し、それぞれが認識し合うことによって１３９４シリアルバスで接続された範囲において、１つのネットワークを構成している。各デジタル機器間をそれぞれ１本の１３９４シリアルバスケーブルで順次接続するだけで、それぞれの機器が中継の役割を行い、全体として１つのネットワークを構成するものである。また、１３９４シリアルバスの特徴でもある、Ｐｌｕｇ＆Ｐｌａｙ機能でケーブルを機器に接続した時点で自動で機器の認識や接続状況などを認識する機能を有している。
【０２８２】
また、図８３に示したようなシステムにおいて、ネットワークからある機器が削除されたり、または新たに追加されたときなど、自動的にバスリセットを行い、それまでのネットワーク構成をリセットしてから、新たなネットワークの再構築を行う。この機能によって、その時々のネットワークの構成を常時設定、認識することができる。
【０２８３】
またデータ転送速度は、１００／２００／４００Ｍｂｐｓと備えており、上位の転送速度を持つ機器が下位の転送速度をサポートし、互換をとるようになっている。
【０２８４】
データ転送モードとしては、コントロール信号などの非同期データ（Ａｓｙｎｃｈｒｏｎｏｕｓデータ：以下Ａｓｙｎｃデータ）を転送するＡｓｙｎｃｈｒｏｎｏｕｓ転送モード、リアルタイムなビデオデータやオーディオデータ等の同期データ（Ｉｓｏｃｈｒｏｎｏｕｓデータ：以下Ｉｓｏデータ）を転送するＩｓｏｃｈｒｏｎｏｕｓ転送モードがある。このＡｓｙｎｃデータとＩｓｏデータは各サイクル（通常１サイクル１２５μＳ）の中において、サイクル開始を示すサイクル・スタート・パケット（ＣＳＰ）の転送に続き、Ｉｓｏデータの転送を優先しつつサイクル内で混在して転送される。
【０２８５】
次に、図８４に１３９４シリアルバスの構成要素を示す。１３９４シリアルバスは全体としてレイヤ（階層）構造で構成されている。図３に示したように、最もハード的なのが１３９４シリアルバスのケーブルであり、そのケーブルのコネクタが接続されるコネクタポートがあり、その上にハードウェアとしてフィジカル・レイヤとリンク・レイヤがある。
【０２８６】
ハードウェア部はインターフェイスチップの部分であり、そのうちフィジカル・レイヤは符号化やコネクタ関連の制御等を行い、リンク・レイヤはパケット転送やサイクルタイムの制御等を行う。
【０２８７】
ファームウェア部のトランザクション・レイヤは、転送（トランザクション）すべきデータの管理を行い、ＲｅａｄやＷｒｉｔｅといった命令を出す。マネージメント・レイヤは、接続されている各機器の接続状況やＩＤの管理を行い、ネットワークの構成を管理する部分である。このハードウェアとファームウェアまでが実質上の１３９４シリアルバスの構成である。
【０２８８】
またソフトウェア部のアプリケーション・レイヤは使うソフトによって異なり、インタフェース上にどのようにデータをのせるか規定する部分であり、ＡＶプロトコルなどのプロトコルによって規定されている。以上が１３９４シリアルバスの構成である。
【０２８９】
次に、図８５に１３９４シリアルバスにおけるアドレス空間の図を示す。
【０２９０】
１３９４シリアルバスに接続された各機器（ノード）には必ず各ノード固有の、６４ビットアドレスを持たせておく。そしてこのアドレスをＲＯＭに格納しておくことで、自分や相手のノードアドレスを常時認識では相手を指定した通信も行える。１３９４シリアルバスのアドレッシングは、ＩＥＥＥ１２１２規格に準じた方式であり、アドレス設定は、最初の１０ｂｉｔがバスの番号の指定用に、次の６ｂｉｔがノードＩＤ番号の指定用に使われる。それぞれの機器内で使用できる４８ビットのアドレスについても２０ビットと２８ビットに分けられ、２５６Ｍバイト単位の構造を持って利用される。
【０２９１】
最初の２０ビットの０〜０ｘＦＦＦＦＤの部分はメモリ空間と呼ばれる。０ｘＦＦＦＦＥの部分はプライベート空間と呼ばれ、機器内で自由に利用できるアドレスである。０ｘＦＦＦＦＦの部分はレジスタ空間と呼ばれ、バスに接続された機器間で共通な情報が置かれ、各機器間のコミュニケーションに使われる。レジスタ空間の最初の５１２バイトには、ＣＳＲアーキテクチャのコアになるレジスタ（ＣＳＲコア）がある。次の５１２バイトにはシリアルバスのレジスタがある。その次の１０２４バイトにはＣｏｎｆｉｇｕｒａｔｉｏｎ  ＲＯＭが置かれる。残りはユニット空間で機器固有のレジスタがある。以上が１３９４シリアルバスの技術の概要である。
【０２９２】
図８６は本発明の第３の実施の形態として、ホスト部とプリンタ部のインターフェイスを１３９４シリアルバスを使って接続したシステムのブロック図である。ホスト部とプリンタ部の主要構成については、図２の概略ブロック図と同等であるので詳しい説明は省略するが、相違点としてはホスト部とプリンタ部の各々に１３９４ＩＦブロックが付加されていて、この１３９４ＩＦを介した１３９４シリアルバスケーブルによってお互いのデータのやり取りが行われる。１３９４ＩＦは、１３９４シリアルバスで転送されるシリアルデータを各機器の内部バスと接続するために、シリアル−パラレル変換やデータパケットの構成等を行うブロックである。
【０２９３】
すなわち本発明の実施の形態におけるプリンタ部は、ホスト部に対して１３９４シリアルバスでつながれた形態になっていて、１３９４シリアルバス上のレジスタ空間を介してホスト部とのデータのやり取りを行うことができる。
【０２９４】
図８７は本発明の実施の形態におけるプリンタ部の内部構成を示すブロック図である。主要ロジックについては図７のブロックと同等であるが、ステートマシンコントローラにつながっていたＩＳＡ−ｂｕｓの部分が、１３９４ＩＦからのＩＦ−ｂｕｓに変わっている点が特徴である。１３９４シリアルバスから送られてきたデータは、１３９４ＩＦによってプリンタ部に対してレジスタアクセスを行うようＩＦ−ｂｕｓが出力され、ホスト部からはあたかもホスト部のＣＰＵ２１がプリンタ部にＩＯアクセスを行っているような環境を提供することができる。
【０２９５】
図８８はステートマシンコントローラの内部構成を示すブロック図である。
【０２９６】
ステートマシンコントローラは１３９４ＩＦからのＩＦ−ｂｕｓを経由してホスト部とのデータのやり取りを行い、プリンタユニットの制御を行うブロックである。
【０２９７】
基本的な動作については図８のブロック図と同等であるのが、相違点となるのはＩＳＡ−ｂｕｓによってＣＰＵ２１が直接アクセスしていたＩ／Ｏレジスタが、１３９４シリアルバスを介して間接的にアクセスが行われるようになった点である。
【０２９８】
ここで基本動作を説明すると、スーパーバイザコマンドレジスタはホスト部からプリンタＩ／ＯコントローラへのＩ／ＯアクセスをＰＲＴ−ｂｕｓを介して行ったり、制御Ｉ／Ｏコマンドの起動・停止コマンドの発行を行うためのレジスタで、スーパーバイザコマンド・アドレスレジスタ（ＳＶＡ／ＩＯ）で設定したＰＲＴ−ｂｕｓのアドレス（ＰＡ）に対してスーパーバイザコマンド・データレジスタ（ＳＶＤ／ＩＯ）を使ってデータ（ＰＤ）の読み書きを行うことを行う。
【０２９９】
制御Ｉ／Ｏコマンド・データレジスタ（ＢＡＴ／ＩＯ）は、ホスト部からプリンタ部メモリをＭＥＭ−ｂｕｓを介して直接アクセスするための機能であり、「アドレス＋データ」のセットでデータ書き込み動作を行うとメモリアドレスカウンタのライトアドレスに対応したプリンタ部メモリのアドレス（ＭＡ）に２バイトのデータ（ＭＤ）が書き込まれ、書き込まれた後にはライトアドレスが毎回＋２インクリメントされる。
【０３００】
制御Ｉ／Ｏコマンド・データレジスタを使ったデータの読み出し動作も同様で、リードアドレスに対応したプリンタ部メモリのデータが２バイト読み出され、読み出し動作後には毎回リードアドレスが＋２インクリメントされる。
【０３０１】
制御Ｉ／Ｏコマンド・データレジスタによってメモリに書き込まれたデータは制御Ｉ／Ｏコマンドを実行するために使われるデータであり、スーパーバイザコマンドレジスタによる制御Ｉ／Ｏコマンドの起動コマンドとしてＢＰ−ｓｔａｒｔに“１”を書き込む事により、プリンタ部メモリから制御Ｉ／Ｏアドレスカウンタのリードアドレスで示されたデータを２バイトづつ読み出し、読み出したデータの下位バイトがアドレス・上位バイトがデータを表しているので、ＰＲＴ−ｂｕｓに読み出したアドレスとデータを出力してプリンタＩ／Ｏコントローラのレジスタへのデータライトアクセス動作を行うことで制御Ｉ／Ｏコマンドの実行を行う。
【０３０２】
この制御Ｉ／Ｏコマンドの実行により読み出されたリードアドレスは＋２づつ毎回インクリメントされ、制御Ｉ／Ｏコマンドの停止コマンド（ＢＰ−ｅｎｄ）が発行されてＢＰ−ｓｔａｒｔが“０”になるまで、制御Ｉ／Ｏコマンド実行動作が繰り返される。
【０３０３】
リフレッシュコントロールは、Ｄ−ＲＡＭのリフレッシュ動作をつかさどる制御ブロックで、８ｍｓの間に５１２回のリフレッシュアクセスを行うようになっていて、その時のアドレスを毎回インクリメントさせるのがリフレッシュアドレスカウンタである。
【０３０４】
メモリアドレスコントロールは、プリンタ部メモリに対して各アクセス要求に優先順位をつけて処理を行うブロックで、制御Ｉ／Ｏコマンドの実行が第一優先・リフレッシュが第二優先・ホスト部からのメモリアクセスが第三優先となっている。これは制御Ｉ／Ｏコマンドの実行時間が変動するのを防ぐための優先順序となっている。以上がステートマシンコントローラの動作説明である。
【０３０５】
この様にホスト部とプリンタ部の接続の形態は一つのものに限定されることはなく汎用のインターフェイスに置きかえることが可能であるので、その際の制御方法については常に共通の環境を用いることができ、更にシステムのハードウエアの構成は状況に合わせて最適なものを使うことが出来るという点が大きな特徴である。
【０３０６】
【発明の効果】
ホストベースプリンティングシステムの簡素化されコストダウンされたプリンタ装置を提供することが出来る。
【０３０７】
ホストベースプリンティングシステムのホストでのプリンタ制御方式を提供することが出来る。
【０３０８】
ホストベーススキャンニングシステムの簡素化されコストダウンされたスキャナ装置を提供することが出来る。
【０３０９】
ホストベーススキャンニングシステムのホストでのスキャナ制御方式を提供することが出来る。
【０３１０】
既存のプリンティングシステム、プリンタドライバに変更を加えないホストベースプリンティングシステムを提供することが出来る。
【図面の簡単な説明】
【図１】本発明を実施したパソコンを示す斜視図である。
【図２】パソコンの概略ブロック図である。
【図３】ホスト部のメモリアドレスマップである。
【図４】ホスト部のＩ／Ｏアドレスマップである。
【図５】ＳＥＴ／ＩＯレジスタの構成図である。
【図６】ＰＲＴ／ＩＯレジスタの構成図である。
【図７】プリンタ制御部のブロック図である。
【図８】ステートマシンコントローラのブロック図である。
【図９】ステートマシンコントローラ内のレジスタマップである。
【図１０】制御Ｉ／Ｏコマンド実行時のタイミング図である。
【図１１】プリンタユニットを表してる図である。
【図１２】プリンタ制御装置のブロック図である。
【図１３】カラー印字用記録ヘッドの内部構成図である。
【図１４】記録ヘッド制御用タイミング図である。
【図１５】キャリッジモーター制御回路を表す図である。
【図１６】キャリッジモーター制御用タイミング図である。
【図１７】プリンタＩＯコントローラＩＣのブロック図である。
【図１８】プリンタＩＯコントローラＩＣのレジスタマップである。
【図１９】プリンタＩＯコントローラＩＣの制御Ｉ／Ｏコマンド実行タイミング制御回路のタイミング図である。
【図２０】従来例のプリンタ制御部のブロック図である。
【図２１】ウエイトコマンド実行時のタイミング図である。
【図２２】プリンタＩＯコントローラＩＣの制御Ｉ／Ｏコマンド実行タイミング制御回路の構成図である。
【図２３】プリンタ初期化フローチャートを表す図である。
【図２４】キャリッジ初期化動作時の自起動領域等速動作制御Ｉ／Ｏコマンド群を表す図である。
【図２５】片方向印字動作時（加速部分）の制御Ｉ／Ｏコマンド群を表す図である。
【図２６】片方向印字動作時（等速部分）の制御Ｉ／Ｏコマンド群を表す図である。
【図２７】片方向印字動作時（減速部分）の制御Ｉ／Ｏコマンド群を表す図である。
【図２８】紙送り動作時（加速部分）の制御Ｉ／Ｏコマンド群を表す図である。
【図２９】紙送り動作時（減速部分）の制御Ｉ／Ｏコマンド群を表す図である。
【図３０】メディアの構成を示した図である。
【図３１】従来例のウィンドウズ・アプリケーションからプリンタへ出力する場合の、ソフトウェア処理手順を示す図である。
【図３２】印刷処理のブロック図である。
【図３３】Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ  のＳｔａｒｔ  Ｄｏｃ  Ｐｏｒｔ（）のフローチャートである。
【図３４】Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ  のＷｒｉｔｅ  Ｐｏｒｔ（）のフローチャートである。
【図３５】Ｌａｎｇｕａｇｅ  Ｍｏｎｉｔｏｒ  のＥｎｄ  Ｄｏｃ  Ｐｏｒｔ（）のフローチャートである。
【図３６】Ｗ−ＲＴＯＳホスト・アプリケーション中の、初期化関数のフローチャートである。
【図３７】Ｗ−ＲＴＯＳホスト・アプリケーション中の、非同期通信関数のフローチャートである。
【図３８】スキャナ処理の流れを示すソフトウェアブロック図である。
【図３９】従来例のＲＴＯＳタスクとウィンドウズ・アプリケーションの通信、またＲＴＯＳタスク間の通信を示す図である。
【図４０】タスク制御を示した図である。
【図４１】タスク遷移状態を示した図である。
【図４２】タスクの構成を示した図である。
【図４３】コントロールコードの基本構成を示した図である。
【図４４】コントロールコード一覧を示した図である。
【図４５】イメージコントロールコードの順序を示した図である。
【図４６】印字ヘッドのドット構成を示した図である。
【図４７】バッファ構成を示した図である。
【図４８】バッファの構成を示した図である。
【図４９】バッファの構成を示した図である。
【図５０】バッファの構成を示した図である。
【図５１】バッファの構成を示した図である。
【図５２】バッファの構成を示した図である。
【図５３】バッファの構成を示した図である。
【図５４】印字順序を示した図である。
【図５５】バッファへのイメージデータをセットする順序を示した図である。
【図５６】バッファからのイメージデータをゲットする順序を示した図である。
【図５７】ポインタ、カウンタを示した図である。
【図５８】コントロールコード解析Ｔａｓｋを示したフローチャートである。
【図５９】印字処理を示したフローチャートである。
【図６０】イメージ展開処理を示したフローチャートである。
【図６１】印字制御Ｉ／Ｏコマンド作成処理を示したフローチャートである。
【図６２】制御Ｉ／Ｏコマンド転送処理を示したフローチャートである。
【図６３】フィード処理を示したフローチャートである。
【図６４】給・排紙処理を示したフローチャートである。
【図６５】スキャン処理Ｔａｓｋを示したフローチャートである。
【図６６】スキャン処理を示したフローチャートである。
【図６７】タイマー管理Ｔａｓｋを示したフローチャートである。
【図６８】回復系処理Ｔａｓｋを示したフローチャートである。
【図６９】ヘッド温調処理Ｔａｓｋを示したフローチャートである。
【図７０】エラー処理Ｔａｓｋを示したフローチャートである。
【図７１】電源管理Ｔａｓｋを示したフローチャートである。
【図７２】印字の制御Ｉ／Ｏコマンドを受信したバッファの内容を示した図である。
【図７３】印字制御Ｉ／Ｏコマンドを受信したバッファの内容を示した図である。
【図７４】印字制御Ｉ／Ｏコマンドを受信したバッファの内容を示した図である。
【図７５】スキャンの制御Ｉ／Ｏコマンドを受信したバッファの内容を示した図である。
【図７６】スキャン制御のＩ／Ｏコマンドを受信したバッファの内容を示した図である。
【図７７】スキャン制御のＩ／Ｏコマンドを受信したバッファの内容を示した図である。
【図７８】発明の実施の形態２の処理を示すブロック図である。
【図７９】ＲＴＯＳストリーム入出力のブロック図である。
【図８０】ＲＴＯＳドライバ９１−０３の入力ファンクションのフローチャートである。
【図８１】ＲＴＯＳドライバ９１−０３の入力ジョブのフローチャートである。
【図８２】発明の実施の形態３の処理を示すブロック図である。
【図８３】ＩＥＥＥ１３９４シリアルバスを用いて構成されるネットワークシステムを示す図である。
【図８４】ＩＥＥＥ１３９４シリアルバスの構成要素を示す図である。
【図８５】ＩＥＥＥ１３９４シリアルバスにおけるアドレス空間を示す図である。
【図８６】ＩＥＥＥ１３９４シリアルバスを用いたシステムのブロック図である。
【図８７】プリンタ部の内部構成を示すブロック図である。
【図８８】ステートマシンコントローラの内部構成を示すブロック図である。
【図１】
0003957825.tif 000002
【図２】
0003957825.tif 000003
【図３】
0003957825.tif 000004
【図４】
0003957825.tif 000005
【図５】
0003957825.tif 000006
【図６】
0003957825.tif 000007
【図７】
0003957825.tif 000008
【図８】
0003957825.tif 000009
【図９】
0003957825.tif 000010
【図１０】
0003957825.tif 000011
【図１１】
0003957825.tif 000012
【図１２】
0003957825.tif 000013
【図１３】
0003957825.tif 000014
【図１４】
0003957825.tif 000015
【図１５】
0003957825.tif 000016
【図１６】
0003957825.tif 000017
【図１７】
0003957825.tif 000018
【図１８】
0003957825.tif 000019
【図１９】
0003957825.tif 000020
【図２０】
0003957825.tif 000021
【図２１】
0003957825.tif 000022
【図２２】
0003957825.tif 000023
【図２３】
0003957825.tif 000024
【図２４】
0003957825.tif 000025
【図２５】
0003957825.tif 000026
【図２６】
0003957825.tif 000027
【図２７】
0003957825.tif 000028
【図２８】
0003957825.tif 000029
【図２９】
0003957825.tif 000030
【図３０】
0003957825.tif 000031
【図３１】
0003957825.tif 000032
【図３２】
0003957825.tif 000033
【図３３】
0003957825.tif 000034
【図３４】
0003957825.tif 000035
【図３５】
0003957825.tif 000036
【図３６】
0003957825.tif 000037
【図３７】
0003957825.tif 000038
【図３８】
0003957825.tif 000039
【図３９】
0003957825.tif 000040
【図４０】
0003957825.tif 000041
【図４１】
0003957825.tif 000042
【図４２】
0003957825.tif 000043
【図４３】
0003957825.tif 000044
【図４４】
0003957825.tif 000045
【図４５】
0003957825.tif 000046
【図４６】
0003957825.tif 000047
【図４７】
0003957825.tif 000048
【図４８】
0003957825.tif 000049
【図４９】
0003957825.tif 000050
【図５０】
0003957825.tif 000051
【図５１】
0003957825.tif 000052
【図５２】
0003957825.tif 000053
【図５３】
0003957825.tif 000054
【図５４】
0003957825.tif 000055
【図５５】
0003957825.tif 000056
【図５６】
0003957825.tif 000057
【図５７】
0003957825.tif 000058
【図５８】
0003957825.tif 000059
【図５９】
0003957825.tif 000060
【図６０】
0003957825.tif 000061
【図６１】
0003957825.tif 000062
【図６２】
0003957825.tif 000063
【図６３】
0003957825.tif 000064
【図６４】
0003957825.tif 000065
【図６５】
0003957825.tif 000066
【図６６】
0003957825.tif 000067
【図６７】
0003957825.tif 000068
【図６８】
0003957825.tif 000069
【図６９】
0003957825.tif 000070
【図７０】
0003957825.tif 000071
【図７１】
0003957825.tif 000072
【図７２】
0003957825.tif 000073
【図７３】
0003957825.tif 000074
【図７４】
0003957825.tif 000075
【図７５】
0003957825.tif 000076
【図７６】
0003957825.tif 000077
【図７７】
0003957825.tif 000078
【図７８】
0003957825.tif 000079
【図７９】
0003957825.tif 000080
【図８０】
0003957825.tif 000081
【図８１】
0003957825.tif 000082
【図８２】
0003957825.tif 000083
【図８３】
0003957825.tif 000084
【図８４】
0003957825.tif 000085
【図８５】
0003957825.tif 000086
【図８６】
0003957825.tif 000087
【図８７】
0003957825.tif 000088
【図８８】
0003957825.tif 000089