(57)【特許請求の範囲】
【請求項１】
メモリの物理アドレスが１頁毎に設定された記憶手段と、
該記憶手段をアクセスする手順が登録され、前記記憶手段から読み出す印刷データの物理アドレスを記憶する第１のレジスタと、該第１のレジスタに記憶するアドレスを始点とした転送データ数を記憶する第２のレジスタと、次の印刷データの転送データ数を記憶しておくメモリの物理アドレスを記憶する第３のレジスタとを有するテーブルと、
該テーブルに登録された順序で前記記憶手段をアクセスし、前記記憶手段から印刷データを読み出し、データ転送を行う転送手段と、
該転送手段によって転送された印刷データに従って記録紙に印刷を行う印刷制御手段を有し、
前記記録紙の表面に対する印刷を行う場合、前記テーブルの第１のレジスタには前記印刷データ１頁分に満たない領域を含まない先頭アドレスが記憶され、以後１頁毎に更新されたアドレスが前記第１のレジスタに書き込まれることを特徴とする印刷システム。
【請求項２】
前記第１のレジスタに書き込まれるアドレスは、予め前記テーブルに記憶されていることを特徴とする請求項１記載の印刷システム。
【請求項３】
記録紙の裏面に対する印刷を行う場合、前記テーブルの第１のレジスタには印刷データの中の最後頁であって、前記印刷データ１頁分に満たない領域の先頭アドレスが記憶され、以後１頁毎に前記印刷データを逆に更新したアドレスが前記第１のレジスタに順次書き込まれることを特徴とする請求項１記載の印刷システム。
【請求項４】
前記第１のレジスタに書き込まれるアドレスは、予め前記テーブルに記憶されていることを特徴とする請求項３記載の印刷システム。
【請求項５】
前記転送手段は、デュアルポートメモリを含み、該デュアルポートメモリの一方のメモリエリアにデータ書き込み処理を行い、他方のメモリエリアからデータの読み出し処理を行うことを特徴とする請求項１記載の印刷システム。
【請求項６】
前記デュアルポートメモリに初期時のデータ書き込みを行う際、書き込みアドレスが読み出しアドレスの位置に達すると、前記デュアルポートメモリの中間位置を次のデータの書き込み位置のスタート位置に設定することを特徴とする請求項５記載の印刷システム。
【請求項７】
前記デュアルポートメモリの一方のメモリエリアへのデータ書き込み処理が半分まで行われると、他方のメモリエリアからのデータ読み出し処理が開始されることを特徴とする請求項５記載の印刷システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は印刷システムに関する。
【０００２】
【従来の技術】
今日、プリンタ装置が広く使用され、プリンタ装置のインターフェース（Ｉ/Ｆ）コントローラには各種ＯＳ（オペレーションシステム）が使用されている。この場合、ユーザ空間でメモリを確保し、描画後カーネル空間でもメモリを確保し、ユーザ空間のメモリ内容をそのままコピーする。
【０００３】
かかる場合、カーネル空間で確保したメモリはページ境界に整列し、連続しているのでＤＭＡ転送し易い。
【０００４】
【発明が解決しようとする課題】
しかしながら、従来のシステムではユーザ空間とカーネル空間の両方でメモリを確保するので２倍のメモリを必要とする。フレームメモリのように、１頁当たり数ＭＢ〜百数十ＭＢのメモリを必要とする用途では、２倍必要であるためコスト的に大きな問題となる。
【０００５】
また、ユーザ空間で確保したメモリをカーネル空間でも使用する方法として、ＯＳ（オペレーションシステム）によっては、例えばmap user kiobuf関数を使用する方法がある。しかし、単純にこの方法を使用する場合、ユーザ空間で確保したメモリは物理アドレス上では必ずしも連続しておらず、又ページ境界に揃ってもいないため、ＤＭＡ転送には使いづらい。
【０００６】
例えば、図１６はこの例を説明する図である。同図に示すように、メモリの物理アドレスは１ページ４ＫＢで構成され、メモリ空間は４ＫＢ毎に区分けされ、同図の例では領域Ｂ〜Ｙで構成される。しかし、メモリ空間の上下には１ページに満たない半端な領域ＡとＺが形成される。
【０００７】
ＤＭＡを行う為にはハードウェアに対しメモリの先頭アドレスと転送するデータ数をセットする必要がある。つまり、ユーザー空間で確保したメモリを１回のＤＭＡで転送する事は不可能で、１ページ分、あるいは１ページに満たない半端な大きさ分に分割された領域を、複数回ＤＭＡ転送する必要がある。１回のＤＭＡが終了する度に、ＣＰＵに割り込みをかけ、次のＤＭＡの為の設定（先頭アドレスと転送バイト数の設定）をする方式は、頻繁に割り込みが発生する事になり、特に時間当たりのデータ転送量の大きな高速プリンタには採用できない。また半端な領域Ａは記録紙の裏面印刷を行う場合、最後に転送される領域であるが、他の領域が４ＫＢなのに対し大きさが異なるため、そこで転送バイト数の設定を変更する必要がある。これは回路を複雑化させる事になる。
【０００８】
本発明はこうした実情に鑑みなされたものであり、各種ＯＳ（オペレーションシステム）を印刷システムに使用する場合でも、効率よく印刷処理を行うことができ、更に裏面印刷も正確に行うことができる印刷システムを提供するものである。
【０００９】
【課題を解決するための手段】
上記課題は請求項１記載の発明によれば、メモリの物理アドレスが１頁毎に設定された記憶手段と、該記憶手段をアクセスする手順が登録され、前記記憶手段から読み出す印刷データの物理アドレスを記憶する第１のレジスタと、該第１のレジスタに記憶するアドレスを始点とした転送データ数を記憶する第２のレジスタと、次の印刷データの転送データ数を記憶しておくメモリの物理アドレスを記憶する第３のレジスタとを有するテーブルと、該テーブルに登録された順序で前記記憶手段をアクセスし、前記記憶手段から印刷データを読み出し、データ転送を行う転送手段と、該転送手段によって転送された印刷データに従って記録紙に印刷を行う印刷制御手段を有し、前記記録紙の表面に対する印刷を行う場合、前記テーブルの第１のレジスタには前記印刷データ１頁分に満たない領域を含まない先頭アドレスが記憶され、以後１頁毎に更新されたアドレスが前記第１のレジスタに書き込まれる印刷システムを提供することによって達成できる。
【００１３】
このように構成することにより、第１のレジスタに記憶する物理アドレスに従って記憶手段をアクセスし、１頁の領域に記憶される所定量の印刷データを読み出し、順次アドレス位置を更新しつつ印刷処理を行い、効率よい印刷処理を行うものである。
【００１５】
このように構成することにより、記憶手段に中途半端な領域が発生するＯＳ（オペレーションシステム）を使用する場合でも、この領域を使用することなく印刷処理を行うことができる。  請求項２の記載は、上記請求項１の記載において、前記第１のレジスタに書き込まれるアドレスは、予め前記テーブルに記憶されている。
【００１６】
このように構成することにより、順次読み出される印刷データをアクセステーブルに予め記憶し、順次第１のレジスタに読み出して使用し、正確な印刷処理を行う。
請求項３の記載は、請求項１の記載において、記録紙の裏面に対する印刷を行う場合、前記テーブルの第１のレジスタには印刷データの中の最後頁であって、前記印刷データ１頁分に満たない領域の先頭アドレスが記憶され、以後１頁毎に前記印刷データを逆に更新したアドレスが前記第１のレジスタに順次書き込まれる構成である。
【００１７】
このように構成することにより、記録紙の裏面を印刷する際、該記録紙の表面と上下逆に印刷する場合でも正確な印刷処理を行うことができる。
請求項４の記載は、上記請求項３の記載において、前記第１のレジスタに書き込まれるアドレスデータは、予め前記アクセステーブルに記憶されている構成である。
【００１８】
このように構成することにより、順次読み出される印刷データをアクセステーブルに予め記憶し、順次第１のレジスタに読み出して使用し、迅速な印刷処理を行うことができる。
請求項５の記載は、上記請求項１の記載において、前記転送手段は、デュアルポートメモリを含み、該デュアルポートメモリの一方のメモリエリアにデータ書き込み処理を行い、他方のメモリエリアからデータの読み出し処理を行う構成である。
【００１９】
請求項６の記載は、上記請求項５の記載において、前記デュアルポートメモリに初期時のデータ書き込みを行う際、書き込みアドレスが読み出しアドレスの位置に達すると、前記デュアルポートメモリの中間位置を次のデータの書き込み位置のスタート位置に設定する構成である。
【００２０】
このように構成することにより、デュアルポートメモリを２つのメモリエリアに分割し、２頁目以降のデータ読み出しとデータ書き込みを交互に行うものである。
請求項７の記載は、上記請求項５の記載において、前記デュアルポートメモリの一方のメモリエリアへのデータ書き込み処理が半分まで行われると、他方のメモリエリアからのデータ読み出し処理が開始される構成である。
【００２２】
【発明の実施の形態】
以下、本発明の実施形態を図面を用いて詳細に説明する。
＜第１の実施形態＞
図１は本実施形態を説明する印刷システムのシステム構成図である。
【００２３】
同図において、本システムはＣＰＵ１、メモリ２、ホストブリッジ３、ＰＣＩ印刷制御部４、ページプリンタエンジン５で構成されていて、ホストブリッジ３とＰＣＩ印刷制御部４は、ＰＣＩバスで接続されている。ＣＰＵ１はプリンタ装置のシステム制御を行い、メモリ２に記憶する印刷データをホストブリッジ３を介してＰＣＩ印刷制御部４に送る。ＰＣＩ印刷制御部４はＰＣＩスロット６、ＰＣＩバス制御部７、ＦＩＦＯ（first in first out）８、ビデオ転送制御部９で構成され、ホストブリッジ３を介して供給される印刷データをページプリンタエンジン５に転送する。
【００２４】
図２はメモリ２の構成を説明する図であり、ユーザ空間側から見た場合（論理アドレス）と、ハードウェア側から見た場合（物理アドレス）を説明するものである。ユーザ空間から見たメモリは連続した空間であり、ハードウェアから見たメモリは連続していない。実施例では確保したメモリの先頭アドレスから新たな先頭アドレスを設定する。尚、先頭アドレスから新たな先頭アドレス間の１ページに満たない半端な領域Ａは未使用とする。
【００２５】
また、ハードウェア側から見た物理アドレスは、前述のように４ＫＢのＢ〜Ｙの１ページ領域と、１ページに満たない半端な領域Ａ、及びＺで構成される。
一方、図３は上記ＰＣＩバス制御部７の構成を示す図である。同図において、ＰＣＩバス制御部７はディスクリプタテーブルコントローラ（ＤＴＣ（Descriptar Table Contller））１０、バーストコントローラ（Burst Controller)１１、マスターコントローラ（Master Controller)１２で構成され、バーストコントローラ１１の出力はＦＩＦＯ８に供給される。
【００２６】
ここで、ディスクリプタテーブルは図４に示す構成であり、転送データ数設定用レジスタ１０ａ、アドレス設定用レジスタ１０ｂ、ディスクリプタアドレス用レジスタ１０ｃで構成される。ＣＰＵ１により転送データ数設定用レジスタ１０ａに１番目の転送データ数が設定される。また、アドレス設定用レジスタ１０ｂに１番目のアドレス（物理アドレス）が設定され、ディスクリプタアドレス用レジスタ１０ｃに２番目に参照するディスクリプタアドレスが設定される。
【００２７】
一方、メモリ１１には２番目以降の転送データ数やアドレス、次のディスクリプタアドレスが記憶される。例えば、メモリ１１−１ａには２番目の転送データ数が記憶され、メモリ１１−１ｂには２番目のアドレスが記憶され、メモリ１１−１ｃには次の（３番目の）ディスクリプタアドレスが記憶される。また、メモリ１１−２ａには３番目の転送データ数が記憶され、メモリ１１−２ｂには３番目のアドレスが記憶され、メモリ１１−２ｃには次の（４番目の）ディスクリプタアドレスが記憶される。
【００２８】
同様にして、順次転送データ数やアドレス、及び次のディスクリプタアドレスが記憶され、最後のメモリ１１−ｎａ〜１１−ｎｃにはｎ番目の転送データ数等が記憶され、メモリ１１−ｍには終端マーク“０”が記憶される。上記の設定作業は、デバイスドライバのソフトウェアに基づきＣＰＵ１により行われる。
【００２９】
ディスクリプタテーブルの設定が完了するとディスクリプタテーブルコントローラ１０によって上記の設定内容が読み出されるよう制御される。
ディスクリプタテーブルコントローラ１０からバーストコントローラ１１にはカウント数のデータ、ＤＴスタート信号が出力され、バーストコントローラ１１からディスクリプタテーブルコントローラ１０にはカウント値“０”のデータが出力される。また、バーストコントローラ１１からＦＩＦＯ（first in first out）８には印刷データ（Data）、及びＦＩＦＯライト信号（FIFO-WR）が出力され、ＦＩＦＯ（first in first out）８からバーストコントローラ１１にはスペースＯＫ信号、又はフル信号（Full）が出力される。
【００３０】
また、マスターコントローラ１２は、ディスクリプタテーブルコントローラ１０及びバーストコントローラ１１の制御部であり、ディスクリプタテーブルコントローラ１０及びバーストコントローラ１１からの要求（DTRQ、DMARQ）に対する処理を行う。また、マスターコントローラ１２はディスクリプタテーブルコントローラ１０に対して応答信号（DTAK）を出力し、バーストコントローラ１１に対して応答信号（DMAAK）を出力する。
以下、本例の処理を図５に示すフローチャートに従って説明する。
【００３１】
先ず、アプリケーションプログラムに従ってマロック（malloc）関数により描画用のフレームメモリを確保する（ステップ（以下、ＳＴで示す）。この処理によって、前述の図２に示すメモリ空間が確保される。
次に、ＩＯコントロール（ioctll）関数を使用してメモリの先頭アドレスをデバイスドライバに通知する（ＳＴ２）。この処理によって、図２に示す先頭アドレスａのアドレスデータがデバイスドライバに通知される。
【００３２】
デバイスドライバでは、メモリの先頭アドレスのデータを受け取ると、マップユーザＫＩＯバッファ（map user kiobuff）関数によって、上記確保したメモリを認識する。そして上記アドレスデータに基づいて、ページの先頭からオフセット値を求める（ＳＴ３）。
【００３３】
アプリケーションプログラムは、このオフセット値をＩＯコントロール（ioctll）関数を使用して受け取り、先に確保したメモリの先頭アドレスから４ＫＢ−オフセット値を計算し、新たな先頭アドレスｂとする（ＳＴ４、ＳＴ５）。そして、印刷データをメモリに描画する際、この新たな先頭アドレスｂをフレームメモリの先頭アドレスとして印刷データの描画を行う（ＳＴ６）。
【００３４】
また、デバイスドライバの処理においては、上記オフセット分のメモリ領域は使用しない（ＳＴ７）。また、次の実施形態の説明である、裏面印刷（リバース印刷）においてはオフセット分のあるページの次のページが最後にデータ転送されるページとなる。
【００３５】
次に、上記のようにして確保したメモリへのデータ転送の際に必要なディスクリプタテーブルの設定について説明する。ディスクリプタテーブルは前述のように、図４に示す構成である。記録紙の表面への印刷処理は、アドレス設定用レジスタ１０ｂに図２に示す新たな先頭アドレスｂのアドレスを書き込み、転送データ数設定用レジスタ１０ａに転送データ数（４ＫＢ）を書き込み、ディスクリプタアドレス用レジスタ１０ｃに２番目の転送データの転送データ数を記憶しておくメモリのアドレスを書き込むことによって設定できる。また、メモリ１１のエリアには順次、次に転送すべきページのアドレスと転送データ数（４ＫＢ）、更に次の転送データ数を記憶しておくメモリのアドレスを書き込むことによって設定できる。
【００３６】
上記のようにディスクリプタテーブルにデータ設定を行った後、印刷データの転送処理を行う。この処理を説明するフローチャートが図６及び図７であり、図６はディスクリプタテーブルコントローラ１０の処理を示し、図７はバーストコントローラ１１の処理を示す。
【００３７】
先ず、ディスクリプタテーブルコントローラ１０はＤＭＡ転送開始の指示を待つ（ステップ（以下、ＳＴＰで示す）１がＮＯ）。このＤＭＡ転送開始の指示はＣＰＵ１から出力され、ＤＭＡ転送開始の指示があると（ＳＴＰ１がＹＥＳ）、バーストコントローラ１１に対して転送要求を行う（ＳＴＰ２）。この転送要求はディスクリプタテーブルコントローラ１０からバーストコントローラ１１に対してＤＴスタートを出力することによって実行される。
【００３８】
また、ディスクリプタテーブルコントローラ１０はマスターコントローラ１２に対してDTRQを出力し、転送データ数設定用レジスタ１０ａに記憶する１番目の転送データ数のデータ、アドレス設定用レジスタ１０ｂに記憶するメモリのアドレスデータ、更にディスクリプタアドレス用レジスタ１０ｃに記憶する次のディスクリプタテーブルのアドレスデータをマスターコントローラ１２に供給する（ＳＴＰ３）。その後、マスターコントローラ１２からのDTAKを待つ（ＳＴＰ４）。
【００３９】
一方、バーストコントローラ１１では、図７に示すフローチャートに従って上記ＤＴスタートの入力を待ち（ＳＴＰ５がＮＯ）、ディスクリプタテーブルコントローラ１０からＤＴスタートが供給されるとマスターコントローラ１２に対してDMARQを出力し、DMAアドレスで示すメモリの位置からデータの用意を依頼する（ＳＴＰ６）。その後、マスターコントローラ１２から出力されるDMAAKを待つ（ＳＴＰ７）。
【００４０】
マスターコントローラ１２は上記DTRQ、及びDMARQが入力すると、ＰＣＩバスにデータの要求を行い、先ずアドレス設定用レジスタ１０ｂに記憶された１番目のアドレスデータを送り、図２に示す新たな先頭アドレスｂの位置から印刷データを読み出す。また、転送データ数の情報から４ＫＢのデータを読み出す。
【００４１】
その後、最初のデータの転送準備が完了すると（ＳＴＰ４がＹＥＳ、ＳＴＰ７がＹＥＳ）、バーストコントローラ１１はＦＩＦＯ（first in first out）８に書き込み信号（FIFO-WR）を出力し、ＦＩＦＯ（first in first out）８にデータ（Data）を書き込む（ＳＴＰ８）。また、この時転送するデータは、転送データ数設定用レジスタ１０ａに設定する４ＫＢのデータである。この処理によって、ＦＩＦＯ（first in first out）８には印刷データの最初の４ＫＢのデータが転送される。
【００４２】
尚、ＰＣＩバスに対する１回のアクセスが終了した際、ＦＩＦＯ（first in first out）８から出力されるスペースＯＫ（SpaceOK）がアクティブであれば再びマスターコントローラ１２に対してデータ要求を行う。また、ＦＩＦＯ（first in first out）８から出力されるフル（Full）がアクティブである場合は、ＦＩＦＯ（first in first out）８に空き領域が無いことを知る。
【００４３】
次に、ＦＩＦＯ（first in first out）８から出力されるスペースＯＫ（SpaceOK）を判断し、ＦＩＦＯ（first in first out）８の空き領域が、ＰＣＩバスのバーストアクセス１回以上の空きが確保されたか判断する（ＳＴＰ９）。そして、バーストアクセス１回以上の空きが確保されると（ＳＴＰ９がＹＥＳ）、カウント数が０であるか判断し、最初の処理ではカウント数が０ではなく、上記処理を繰り返す（ＳＴＰ１０がＮＯ、ＳＴＰ５〜ＳＴＰ１０）。
【００４４】
また、図３に示すように、上記カウント数の情報はディスクリプタテーブルコントローラ１０からバーストコントローラ１１に供給されており、この情報を確認して行う（ＳＴＰ１１がＮＯ、ＳＴＰ１２）。尚、このカウント数は前述のメモリに区分けされる領域の数に対応し、例えばカウント数ｍに設定され、カウント数が０になるまで上記処理が繰り返される（ＳＴＰ１３がＮＯ）。
【００４５】
したがって、マスターコントローラ１２に対して順次DTRQを出力し、転送データ数設定用レジスタ１０ａ、アドレス設定用レジスタ１０ｂ、及びディスクリプタアドレス用レジスタ１０ｃに記憶するデータを順次出力し、ＦＩＦＯ（first in first out）８に印刷データを転送する。
【００４６】
その後、最後の印刷データがメモリから読み出されＦＩＦＯ（first in first out）８に転送されるとカウンタ数は０となり、ディスクリプタテーブルコントローラ１０及びバーストコントローラ１１の処理が終了する。また、ＦＩＦＯ（first in first out）８に転送された印刷データは、勿論順次ビデオ転送制御部９を介してページプリンタエンジン５に送られ、記録紙への印刷処理に供される。
【００４７】
以上のように処理することによって、メモリの先頭に中途半端な領域を有するＯＳ（オペレーションシステム）を使用する場合でも、この領域を未使用としてメモリアクセスを容易に行い、迅速な印刷データの転送処理を行うことができる。
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。
【００４８】
本例は前述の実施形態と異なり、記録紙の裏面印刷に関するＤＭＡ転送処理である。図８に示すシステム図、及び図９に示すＰＣＩバス制御部１７のシステム図は本実施形態を説明する図であり、前述の図１及び図３と同一回路には同じ番号を使用する。
【００４９】
先ず、図８において、本システムもＣＰＵ１、メモリ２、ホストブリッジ３、ＰＣＩ印刷制御部４、ページプリンタエンジン５で構成されていてホストブリッジ３とＰＣＩ印刷制御部４は、ＰＣＩバスで接続されている。ＣＰＵ１はプリンタ装置のシステム制御を行い、メモリ２に記憶する印刷データをホストブリッジ３を介してＰＣＩ印刷制御部４に送る。ＰＣＩ印刷制御部４はＰＣＩスロット６、ＰＣＩバス制御部１７、ＬＩＦＯ（last in first out）１８、ビデオ転送制御部９で構成され、ホストブリッジ３を介して供給される印刷データをページプリンタエンジン５に転送する。
【００５０】
図９は上記ＰＣＩバス制御部１７の構成を説明する図であり、ディスクリプタテーブルコントローラ１９、バーストコントローラ２０、マスターコントローラ２１で構成されている。また、ＬＩＦＯ１８とバーストコントローラ２０には、必要に応じてリバース（Reverse）フラグ２２が供給される。
【００５１】
尚、ディスクリプタテーブルコントローラ１９とバーストコントローラ２０間でのデータ転送、ＬＩＦＯ１８とバーストコントローラ２０間でのデータ転送、及びマスターコントローラ２２とディスクリプタテーブルコントローラ１９及びバーストコントローラ２０間のデータ転送については後述する。
【００５２】
本例における裏面印刷の場合、記録紙に印刷される印刷データは表面とは逆であり、表面に対して裏面は上下が逆方向に印刷される。したがって、転送する印刷データのメモリの最後の領域に記憶される印刷データから転送を開始する必要がある。しかも、印刷データを逆に転送するとしても、１ページの同じ領域では表面と同様に上から下に（小さいアドレスデータから大きいアドレスデータ）に向けてデータを読み出す必要がある。
【００５３】
この為、ディスクリプタテーブルに設定するデータを工夫する必要がある。本実施形態においては、この処理を以下のように行う。
図１０は上記処理を説明するフローチャートである。先ず、図２に示すメモリ領域の中で、１ページの領域（以下、単に領域で示す）Ｙが、領域Ｂから数えて何ページ目であるか計算する。そして、ページアドレス（page address）関数によって当該ページの先頭の論理アドレスを求め、バートツーバス（virt to bus）関数によって論理アドレスを物理アドレスに変換して前述のアドレス設定用レジスタ１０ｂにセットする（ステップ（以下、Ｓで示す）１）。本例の場合、上記処理によって図２に示すｃ１のアドレスデータがアドレス設定用レジスタ１０ｂにセットされる。
【００５４】
次に、メモリ１ページのトータルのＤＭＡカウンタ値を４ＫＢで割った余りの大きさ、即ち領域Ｚの大きさを求める。そして、領域Ｚの大きさをＤＭＡカウンタレジスタにセットする。すなわち、転送データ数設定用レジスタ１０ａに転送データ数をセットし、トータルのＤＭＡカウンタ値を領域Ｚ分減算する（Ｓ２）。本例の場合、この転送データ数設定用レジスタ１０ａに領域Ｚのデータ数が書き込まれる。
【００５５】
次に、ディスクリプタテーブル用メモリを確保する。そして、メモリの先頭アドレスをバートツーバス（virt to bus）関数によって物理アドレスに変換し、当該物理アドレスをディスクリプタアドレス用レジスタ１０ｃに書き込む（Ｓ３）。本例の場合、このディスクリプタアドレス用レジスタ１０ｃに次のディスクリプタテーブルのアドレスが書き込まれる。以上の処理によって、図４に示す各レジスタ１０ａ〜１０ｃには初期データが書き込まれる。
【００５６】
次に、トータルのＤＭＡカウンタの値が０であるか判断する（Ｓ４）。ここで、ＤＭＡカウンタのトータル値は前述のようにｍであり、最初の判断では０ではなく（Ｓ４がＮＯ）、ＤＭＡカウンタ値を４ＫＢ（１ページ分）減算し、４ＫＢの値をディスクリプタメモリ１１にセットする（Ｓ５）。具体的には、ディスクリプタメモリ１１−１ａに４ＫＢのデータをセットする。また、この処理（Ｓ５）において、ディスクリプタテーブル用のメモリアドレスを＋１する。
【００５７】
次に、領域Ｂから数えて何ページ目であるかを計算し、ページアドレス（page address）関数によって当該ページの先頭の論理アドレスを求め、バートツーバス（virt to bus）関数によって論理アドレスを物理アドレスに変換してディスクリプタメモリ１１にセットする。具体的には、ディスクリプタメモリ１１−１ｂにＣ２の物理アドレスをセットする。
【００５８】
次に、現在のディスクリプタテーブル用メモリのアドレス＋１のアドレスを求め、バートツーバス（virt to bus）関数によって物理アドレスに変換し、当該物理アドレスをディスクリプタメモリ１１にセットする（Ｓ７）。具体的には、ディスクリプタメモリ１１−１ｃに、次のディスクリプタメモリ１１（１１−２ａ）のアドレスをセットする。
【００５９】
その後、上記処理を繰り返し、ＤＭＡカウンタ値が０になると（Ｓ４がＹＥＳ）、ディスクリプタメモリ１１に終端マーク０をセットする（Ｓ８）。すなわち、図４に示すディスクリプタメモリ１１−ｍに終端マーク０をセットする。
したがって、上記処理によってディスクリプタメモリ１１には２番目以降の転送データ数、アドレスデータ、次のディスクリプタメモリをアクセスする為のアドレス情報がセットされ、ディスクリプタテーブルが完成する。
【００６０】
以上のようにしてディスクリプタテーブルが完成すると、図１１乃至図１３に示すフローチャートに従って本例の処理を実行する。尚、図１１はディスクリプタテーブルコントローラ１９の処理を説明するフローチャートであり、図１２はバーストコントローラ２０の処理を説明するフローチャートであり、図１３はＬＩＦＯ１８の処理を説明するフローチャートである。
【００６１】
前述と同様、先ずディスクリプタテーブルコントローラ１０はＤＭＡ転送開始の指示を待ち（Ｓ９）、ＤＭＡ転送開始の指示があると（Ｓ９がＹＥＳ）、バーストコントローラ１１に対して転送要求を行う（Ｓ１０）。また、ディスクリプタテーブルコントローラ１０はマスターコントローラ１２に対してDTRQを出力し、転送データ数設定用レジスタ１０ａに記憶する１番目の転送データ数のデータ、アドレス設定用レジスタ１０ｂに記憶するメモリのアドレスデータ、更にディスクリプタアドレス用レジスタ１０ｃに記憶する次のディスクリプタテーブルのアドレスデータをマスターコントローラ２１に供給し（Ｓ１１）、マスターコントローラ２１からの応答を待つ（Ｓ１２）。
【００６２】
バーストコントローラ２０では、図１２に示すフローチャートの処理に従って上記ＤＴスタートの入力を待ち（Ｓ１３）、ＤＴスタートが供給されるとマスターコントローラ１２に対してDMARQを出力し、DMAアドレスで示すメモリの位置からデータの用意を依頼し（Ｓ１４）、マスターコントローラ２１から出力されるDMAAKを待つ（Ｓ１５）。
【００６３】
マスターコントローラ２１は上記DTRQ、及びDMARQが入力すると、ＰＣＩバスにデータの要求を行い、先ずアドレス設定用レジスタ１０ｂに記憶された１番目のアドレスデータを送り、図２に示すアドレスｃ１位置から印刷データを読み出す。また、転送データ数の情報から１ページに満たない半端な領域Ｚのデータ量を読み出す。すなわち、図２に示すｃ１のアドレスから矢印ｒ１方向に印刷データを領域Ｚのデータ分読み出す。
【００６４】
その後、転送準備が完了すると（Ｓ１５がＹＥＳ）、ＬＩＦＯ１８に対して書込み信号（FIFO-W）を出力し、上記印刷データをＬＩＦＯ１８に書き込む。図１３に示す（ａ）及び（ｂ）は、ＬＩＦＯ１８に対する書き込み要求があった場合の処理であり、ＬＩＦＯ１８に書き込み要求があると、ＬＩＦＯの要求カウンタを＋１する（ステップ（以下、Ｗで示す）１がＹＥＳ、Ｗ２）。また、１回目の書き込み要求であるか初回を示すフラグで判断し（Ｗ３、Ｗ４）、初回を示すフラグであれば（Ｗ４がＹＥＳ）、書き込みアドレスが読み出しアドレスの初期値に達したか判断する（Ｗ５）。
【００６５】
そして、書き込みアドレスが読み出しアドレスの初期値に達していれば（Ｗ５がＹＥＳ）、ＬＩＦＯ（last in first out）１８の書き込みアドレスカウンタをＬＩＦＯ（last in first out）１８の中央値に設定し、初回を示すフラグをリセットする（Ｗ６）。
【００６６】
また、上記書き込み処理が初回でもなく、また１回目において書き込みアドレスが読み出しアドレスの初期値に達していなければ（Ｗ４がＮＯ）、ＬＩＦＯ１８の書き込みアドレスカウンタを＋１する（Ｗ７）。
一方、上記書き込み処理はＬＩＦＯ１８の半分の容量分の印刷データが書き終わるまで繰り返され（図１２に示すＳ１７、Ｓ１８）、その後半分の容量の印刷データが書き終わると（Ｓ１９がＹＥＳ）、上記処理（Ｓ１３）に戻る。
【００６７】
図１４は上記処理を説明するＬＩＦＯ１８のメモリ変化図であり、ＬＩＦＯ１８を構成するデュアルポートメモリへのデータ書き込み、及び読み出しの変化を説明する図である。
前述のように、最初に読み出されるデータは領域Ｚの半端なデータであり、図１４（ａ）に示すように、書き込みアドレスの初期値はｄ１であり、読み出しアドレスの初期値はｄ２である。上記処理に従ってＬＩＦＯ１８へのデータ転送が行われ、書き込みアドレスの初期値ｄ１から印刷データが順次転送され、同図（ｂ）に示す状態となる。
【００６８】
その後、同図（ｃ）に示すように、書き込みアドレスが読み出しアドレスの初期値に達すると（前述のＷ５がＹＥＳ）、ＬＩＦＯ１８の書き込みアドレスカウンタをＬＩＦＯ１８の中央値に設定する（前述のＷ６）。すなわち、図１４（ｄ）に示すｄ３の位置に設定する。
【００６９】
次に、図１５（ａ）に示すように処理（ＳＴ１）に戻り、次の印刷データの読み出し処理を行う。この場合、次の印刷データの読み出し位置は前述のアドレスｃ２の位置であり、アドレスｃ２の位置から印刷データを読み出し、デュアルポートメモリのｄ３の位置からデータを書き込む（図１４（ｄ）参照）。そして、メモリの半分の位置まで印刷データを読み出すと、前の印刷データの読み出し処理を開始する（図１５（ａ）参照）。
【００７０】
すなわち、上記前の印刷データ（領域Ｚの印刷データ）はｄ２のアドレス位置から矢印方向に読み出される。そして、以後新たな印刷データ（領域Ｙの印刷データ）は同図（ｂ）の矢印方向に書き込まれると同時に、前の印刷データ（領域Ｚの印刷データ）は矢印方向に読み出される。
【００７１】
その後、デュアルポートメモリへの領域Ｙの印刷データの転送完了を待ち（図１５（ｃ））、デュアルポートメモリへの領域Ｙの印刷データの転送が完了すると（図１５（ｄ））、次の印刷データ（領域Ｘの印刷データ）の入力処理を実行する（図１５（ｅ））。
【００７２】
以上の処理を繰り返すことによって、ＬＩＦＯ１８からビデオ転送制御部９に印刷データが転送され、ページプリンタエンジン５によって記録紙に印刷される。この時、転送される印刷データは、前述の図２に示すメモリエリアの領域Ｚから領域Ｙ、領域Ｘ、・・・、と順次データを逆方向に読み出したものであり、かつ各領域での印刷データの読み出し方向は図２に矢印で示すｒ１、ｒ２、・・・の方向である。
【００７３】
尚、図１３に示す（ｃ）、（ｄ）は、ＬＩＦＯ１８からのデータ読み出し処理を説明するフローチャートであり、データ読み出しの要求があるとＬＩＦＯ１８の容量カウンタを−１する（ステップ（以下、Ｖで示す）１、Ｖ２）。また、ＬＩＦＯ１８からデータ読み出しの要求があると、リードアドレスカウンタを−１する（Ｖ３、Ｖ４）。
【００７４】
また、図１１に示すようにトータルカウント数の情報はディスクリプタテーブルコントローラ１９からバーストコントローラ２０に供給されており、この情報を確認し（Ｓ２０がＮＯ、Ｓ２１）、このカウント数が０になるまで上記処理を繰り返す（Ｓ２２）。
【００７５】
以上のように、本例によれば、使用するＯＳ（オペレーションシステム）の読み出し方向に合致した処理を行うことができ、このようにして読み出された印刷データはＬＩＦＯ１８によって調整され、実質的に１ライン毎に逆方向から印刷データを読み出した状態で記録紙の裏面に印刷を行うことができる。
【００７６】
したがって、特別なＯＳ（オペレーションシステム）を使用して印刷処理を行う場合でも、正確に裏面印刷を行うことができる。
【００７７】
【発明の効果】
以上説明したように、本発明によれば中途半端な領域が形成されるメモリに対しても印刷処理を行うことができ、また裏面印刷も正確に行うことができる。
したがって、各種ＯＳ（オペレーションシステム）を採用して印刷処理を行うことができる。
【図面の簡単な説明】
【図１】第１の実施形態を説明する印刷システムのシステム構成図である。
【図２】メモリ構成を説明する図であり、ユーザ空間から見た場合（論理アドレス）と、ハードウェアから見た場合（物理アドレス）を説明する図である。
【図３】ＰＣＩバス制御部の構成を示す図である。
【図４】ディスクリプタテーブルの構成を説明する図である。
【図５】第１の実施形態の処理を説明するフローチャートである。
【図６】ディスクリプタテーブルコントローラの処理を説明するフローチャートである。
【図７】バーストコントローラの処理を説明するフローチャートである。
【図８】第２の実施形態を説明する印刷システムのシステム構成図である。
【図９】第２の実施形態で使用するＰＣＩバス制御部の構成を示す図である。
【図１０】デバイスドライバによるディスクリプタテーブルの設定処理を説明するフローチャートである。
【図１１】第２の実施形態におけるディスクリプタテーブルコントローラの処理を説明するフローチャートである。
【図１２】第２の実施形態におけるバーストコントローラの処理を説明するフローチャートである。
【図１３】第２の実施形態におけるＬＩＦＯの処理動作を説明するフローチャートである。
【図１４】第２の実施形態におけるＬＩＦＯの処理動作を説明する図である。
【図１５】第２の実施形態におけるＬＩＦＯの処理動作を説明する図である。
【図１６】従来例を説明するメモリ構成図である。
【符号の説明】
１ ＣＰＵ
２  メモリ
３  ホストブリッジ
４  ＰＣＩ印刷制御部
５  ページプリンタエンジン
６  ＰＣＩスロット
７、１７  ＰＣＩバス制御部
８  ＦＩＦＯ（first in first out）
９  ビデオ転送制御部
１０、１９  ディスクリプタテーブルコントローラ
１０ａ  転送データ数設定用レジスタ
１０ｂ  アドレス設定用レジスタ
１０ｃ  ディスクリプタアドレス用レジスタ
１１、２０  バーストコントローラ
１２、２１  マスターコントローラ
１８  ＬＩＦＯ（last in first out）
【図１】
0003994724.tif 000002
【図２】
0003994724.tif 000003
【図３】
0003994724.tif 000004
【図４】
0003994724.tif 000005
【図５】
0003994724.tif 000006
【図６】
0003994724.tif 000007
【図７】
0003994724.tif 000008
【図８】
0003994724.tif 000009
【図９】
0003994724.tif 000010
【図１０】
0003994724.tif 000011
【図１１】
0003994724.tif 000012
【図１２】
0003994724.tif 000013
【図１３】
0003994724.tif 000014
【図１４】
0003994724.tif 000015
【図１５】
0003994724.tif 000016
【図１６】
0003994724.tif 000017