JP2000231540A - 通信制御装置および通信制御方法及び記憶媒体 - Google Patents

通信制御装置および通信制御方法及び記憶媒体

Info

Publication number
JP2000231540A
JP2000231540A JP11033318A JP3331899A JP2000231540A JP 2000231540 A JP2000231540 A JP 2000231540A JP 11033318 A JP11033318 A JP 11033318A JP 3331899 A JP3331899 A JP 3331899A JP 2000231540 A JP2000231540 A JP 2000231540A
Authority
JP
Japan
Prior art keywords
data
output
encoding
clock
signal
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP11033318A
Other languages
English (en)
Inventor
Yoichi Sakamoto
陽一 坂本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP11033318A priority Critical patent/JP2000231540A/ja
Priority to US09/501,523 priority patent/US6791705B1/en
Publication of JP2000231540A publication Critical patent/JP2000231540A/ja
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • G06F13/4226Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus with asynchronous protocol

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Record Information Processing For Printing (AREA)
  • Information Transfer Systems (AREA)
  • Communication Control (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

(57)【要約】 【課題】非同期転送のインターフェースを用いて高速に
データ転送を行わせる。 【解決手段】符号化プログラム13により、ビットマッ
プデータを、特定の値が含まれないように符号化する。
演算プログラム14は、符号化データを、バイト単位で
隣接するデータが同じ値にならないように、前記特定の
値を用いて演算する。通信プログラムはそれをプリンタ
7に送信する。プリンタ7では、受信したデータの変化
のタイミングを基にクロックを生成し、受信データをラ
ッチする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、例えば所定の通信
媒体を介して相互にデータ通信処理を行う通信制御装置
および通信制御方法およびコンピュータが読み出し可能
なプログラムを格納した記憶媒体関するものである。
【0002】
【従来の技術】従来、各種のデータ処理装置間におい
て、汎用のパラレルポートを経由してデータ転送処理を
行う場合、非同期方式の転送、例えば制御信号nSto
robeと状態信号Busyを使用してハンドシェーク
を行うのが一般的である。この方法によれば、送信側
は、データを1バイト転送するごとにBusyが「L」
状態であることを確認してデータを1バイト出力した後
に、制御信号nStorobeに「L」レベルを出力す
る。受信側は、信号nStorobeが「L」になった
ことを確認して信号busyを「H」にし、データを取
り込み終えたら信号Busyを「L」に戻す。
【0003】
【発明が解決しようとする課題】一般のパーソナルコン
ピュータでは、このハンドシェークをハードウェアで行
うことができないため、ソフトウェアで行っており、高
速のデータ転送を行うことができなかった。
【0004】この問題を解決するため、IEEE規格
「IEEE Std 1284−1994」に規定され
るECPモード転送のように、ハードウェアでハンドシ
ェークを行うことにより、高速のデータ転送を行う方法
がある。
【0005】しかしながらこの方法では、専用のハード
ウエアが必要なために、高速でデータ転送できるのはこ
のハードウェアを備えているコンピュータに制限される
という問題点があった。
【0006】また、パラレルポートで転送される8ビッ
トのデータのうちの固定の1ビットをクロックビットと
して使用し、1バイト毎のハンドシェークを省略するこ
とにより、高速転送を可能にする方法が提案されてい
る。
【0007】しかしながらこの方法では、1ビットをク
ロックビットとして使用するため、1回の転送で7ビッ
トしか送ることができない。
【0008】また、特表平9−505421のようにク
ロックビットを固定せず、任意の1ビットをクロックビ
ットとして使用する方法もある。この方法では、同一の
バイトデータが連続すると受信側でクロックを生成でき
ないため、隣接するバイトデータが同一になる場合には
その間に固定値のバイトデータを挿入する。あるいは、
バイト単位でランレングス符号化されたデータであれ
ば、レングスとデータとが隣接する。そのために、隣接
するバイトデータが同一になる場合にはレングスバイト
の値を1だけ減分する。このようにして、同一バイトデ
ータが隣接しないようにすることにより、クロックを生
成して高速転送を可能にする方法がある。
【0009】しかしながら、この方法では、同じ値のバ
イトデータの連続転送をさけるために固定のデータバイ
トを挿入、あるいはレングスバイトの値を1だけ減分す
るので、圧縮率が悪化するという問題がある。また、連
続する2バイトのデータを繰り返しコマンドに符号化し
なければならないため、圧縮率が悪化することがあると
いう問題がある。例えば、「A」「A」「B」の繰り返
しの系列をランレングス符号化する場合を考える。この
場合、「A」「A」が「長さ2の繰り返し」「A」に、
「B」が「長さ1の生データ」「B」に符号化される
と、3バイトの元データが4バイトの符号に変換され
る。このように単純にランレングス符号化を適用すると
圧縮率が悪くなるため、「A」「A」を繰り返しとして
符号化せずに生データとして符号化することにより、圧
縮率の悪化を防ぐことが一般的である。しかし、上述の
方法では同一の符号バイトが連続することが許されない
ため、圧縮率の悪化を防ぐことができない。
【0010】本発明は、上記の問題点を解消するために
なされたもので、受信側において、符号化されて転送さ
れる所定ビット数のパラレルのデータ信号からデータ信
号を抽出するためのクロックを生成しつつデータ信号を
受信するため高速にデータを転送でき、送信側において
は、同じ値が連続して表れず、しかも元データよりもサ
イズが大きくならないように送信データを符号化するこ
とで、受信側でのクロックの生成を保証し、その上圧縮
率を低下させない通信制御装置および通信制御方式およ
び記憶媒体を提供することを目的とする。
【0011】
【課題を解決するための手段】上記目的を達成するため
に、本発明においては、送信側からデータを送信する際
に、特定の値の符号化データが生じないようにデータを
符号化し、符号化データを、同じ値の符号化データが連
続しないように演算して送信する。受信側では、受信し
たデータの値の変化によりクロックを生成し、そのクロ
ックに同期してデータを読み込む。
【0012】また、本発明は次のような構成からなる。
すなわち、複数のデータ信号線および少なくとも一つの
制御信号線および少なくとも一つの状態信号線を有する
パラレルポートと、前記パラレルポートの任意のデータ
信号の変化を検出してクロック信号を生成するクロック
生成手段と、前記クロック生成手段によりクロック信号
が生成されたときに、前記パラレルポートを介して受信
したデータ信号を一時記憶するレジスタと、前記クロッ
ク生成手段によりクロック信号が生成される前に前記レ
ジスタに一時記憶されていたデータと、前記クロック生
成手段によりクロック信号が生成されたときに前記レジ
スタに一時記憶されたデータとの演算を行い演算結果を
出力する演算器と、前記演算器が出力した演算結果を記
憶する記憶手段と、前記記憶手段に所定の空き領域があ
るか否かを示す受信可能状態信号を前記パラレルポート
の状態信号線またはデータ信号線に出力する受信可能状
態信号出力手段とを有する。
【0013】あるいは、複数のデータ信号線および少な
くとも一つの制御信号線および少なくとも一つの状態信
号線を有するパラレルポートと、前記パラレルポートを
介して外部に転送すべき元データを解析して特定の値を
含まないように符号化データを生成する符号化手段と、
前記符号化手段が生成した符号化データに所定の演算を
行い、演算結果を出力する演算手段と、前記パラレルポ
ートに接続されている装置が出力する受信可能状態信号
が所定の大きさのデータを受信可能であることを示して
いる場合に、前記演算手段により出力された演算結果の
データを前記パラレルポートのデータ信号線に出力する
通信手段とを有する。
【0014】あるいは、データ値の変化に応じて受信ク
ロックを生成する受信側装置に対して所定幅のパラレル
インターフェースを介してデータを送信する通信制御装
置であって、送信するパラレルデータを、特定の値を含
まないように符号化する符号化手段と、前記符号化手段
により符号化されたパラレルデータを、隣接するデータ
が互いに異なる値となるように演算する演算手段と、前
記演算手段により演算されたデータを前記パラレルイン
ターフェースを介して送信する手段とを備える。
【0015】
【発明の実施の形態】〔第1実施形態〕図1は、本発明
の第1実施形態における通信制御装置を含むコンピュー
タシステムのブロック図である。
【0016】<システムの構成>図において、ホストコ
ンピュータ1は、CPU2、メモリ3、ハードディスク
4、フロッピー(登録商標)ドライブ5およびホストパ
ラレルポート6を備え、ホストパラレルポート6を介し
てプリンタ7に接続されている。
【0017】CPU2は、メモリ3に記憶された各種の
制御プログラム、アプリケーションプログラムを実行す
る。メモリ3は、ハードディスク4またはフロッピード
ライブ5から読み出されたプログラム、およびそのプロ
グラムが必要とするデータを記憶する。
【0018】ハードディスク4は、図2において後述す
るオペレーティングシステム10、アプリケーションプ
ログラム(アプリケーション)11、プリンタドライバ
プログラム12、符号化プログラム13、演算プログラ
ム14、通信プログラム15などのプログラムを格納す
る。
【0019】フロッピードライブ5は、インストールデ
ィスク8などのフロッピーディスクを装着することがで
き、装着されたフロッピーディスクに格納されたプログ
ラムを読み取る。ホストパラレルポート6は、プリンタ
7にデータおよび制御信号を送るとともに、プリンタ7
からの状態信号を受け取ることができる。プリンタ7
は、ホストパラレルポート6からデータおよび制御信号
を受け取り、印刷を行うとともに、ホストパラレルポー
ト6にプリンタ7の各種ステータスを状態信号として送
る。
【0020】インストールディスク8は、後述する図2
に示すプリンタドライバプログラム12、符号化プログ
ラム13、演算プログラム14、通信プログラムプログ
ラム15およびインストールプログラムを格納する。
【0021】通常のインストール操作は、操作者がイン
ストールディスク8をフロッピードライブ5(あるいは
図示しないCD−ROMドライブ)にセットし、インス
トールプログラムを起動すると、インストールプログラ
ムはプリンタドライバプログラム12、符号化プログラ
ム13、演算プログラム14、通信プログラム15をイ
ンストールディスク8から読み込み、ハードディスク4
に書き込む。
【0022】また、インストールプログラムはオペレー
ティングシステム10が提供する機能を用いて、プリン
タドライバプログラム12がアプリケーション11から
使用可能となるように設定する。
【0023】図2は、本発明に係る通信制御装置を適用
可能な印刷システムの構成を示すブロック図である。
【0024】ホストコンピュータ1において、オペレー
ティングシステム(OS)10は、CPU2、メモリ
3、ハードディスク4、フロッピードライブ5、ホスト
パラレルポート6などのハードウェア資源の管理、およ
びアプリケーションプログラム11、プリンタドライバ
プログラム12、符号化プログラム13、演算プログラ
ム14、通信プログラム15などのソフトウェアの管理
を行う。
【0025】アプリケーションプログラム11は、操作
者の指示に従って印刷データを作成するとともに、オペ
レーティングシステム10を経由してプリンタドライバ
プログラム12に印刷指令を発行する。プリンタドライ
バプログラム12は、アプリケーションプログラム11
から発行された印刷指令に基づき、プリンタ7が印刷を
行うためのビットマップデータを作成する。
【0026】符号化プログラム13は、プリンタドライ
バプログラム12が作成したビットマップデータから、
特定値のデータバイトを含まないような符号化データを
生成する。演算プログラム14は、符号化プログラム1
3が生成した符号化データに、同じ値のデータバイトが
連続しないように演算を施し、その演算結果のデータを
出力する。通信プログラム15は、プリンタ7に対し印
刷の指令を行うとともに、演算プログラム14が出力し
た演算結果のデータをプリンタ7に出力する。
【0027】ホストパラレルポート6は、IEEE規格
「IEEE Std 1284−1994」に規定され
る、8ビットのデータ信号Data1からData8、
プリンタ7を制御する4ビットの制御信号nStoro
be、nAutoFd、nSelectIn、nIni
t、プリンタ7の状態を示す5ビットの状態信号nAc
k、Busy、PError、Select、nFau
ltによりプリンタパラレルポート16に接続される。
【0028】プリンタ7において、プリンタパラレルポ
ート16は、前述の信号によりホストパラレルポート6
に接続される。
【0029】制御回路17は、例えば1チップCPUで
構成され、プリンタパラレルポート16の制御を行うと
ともに、プリンタエンジン22との間でシリアル信号を
用いてエンジンコマンドの送信およびエンジンステータ
スの受信を行う。
【0030】ラッチ回路18は、通信プログラム15が
出力した符号列データの受信の際に、データ信号からク
ロックを生成し、データをラッチするとともに、ラッチ
したデータと直前にラッチされていたデータの相互間で
所定の演算を行い、演算結果を出力する。
【0031】FIFO(ファーストインファーストアウ
ト)メモリ19は、ラッチ回路18が出力したデータを
記憶し、記憶したデータを先入れ先出しの順に復号回路
20に出力する。FIFOメモリ19はまた、空き容量
が8KB以上であるか否かを示す信号FULLをプリン
タパラレルポート16に出力する。
【0032】復号回路20は、FIFOメモリ19に記
憶された符号列データを復号し、シフトレジスタ21に
出力する。
【0033】シフトレジスタ21は、プリンタエンジン
22から主走査の開始を通知するBD信号を受信する
と、復号回路20が出力したパラレルデータをシリアル
データに変換し、プリンタエンジン22に出力する。
【0034】プリンタエンジン22はレーザビームプリ
ンタエンジンであり、制御回路17との間でシリアル信
号を用いてエンジンコマンドの受信およびエンジンステ
ータスの送信を行い、制御回路17からPRINTコマ
ンドを受信すると1ページの印刷処理を開始し、用紙が
所定の位置に達すると主走査の開始を通知するBD信号
をシフトレジスタ21に出力し、シフトレジスタ21が
出力したシリアルデータに従って印刷を行う。
【0035】<データ転送処理>以下、印刷処理時にお
けるデータ転送処理動作について説明する。
【0036】操作者がホストコンピュータ1側でアプリ
ケーションプログラム11を操作して印刷データを生成
し、これを印刷指示すると、アプリケーションプログラ
ム11からオペレーティングシステム10を経由してプ
リンタドライバプログラム12に印刷指令が渡される。
プリンタドライバプログラム12はアプリケーションプ
ログラム11から発行された印刷指令に基づき、ビット
マップデータを作成する。
【0037】そして、符号化プログラム13は、後述す
る符号化手順に基づき、プリンタドライバプログラム1
2が作成したビットマップデータから、特定のバイトデ
ータを含まないような符号化データを生成する。演算プ
ログラム14は、符号化プログラム13が生成した符号
化データに所定の演算を施し、演算結果のデータを出力
する。なお、以下の説明において「0xmn」は、数m
nが16進数であることを表している。
【0038】通信プログラム15はまず、印刷の開始を
指示するコマンド「0x01」を、ホストパラレルポー
ト6を経由して送信する。制御回路17はプリンタパラ
レルポート16を経由してこれを受信する。受信したコ
マンドが印刷の開始を指示するコマンド「0x01」で
あった場合、制御回路17はプリンタエンジン22にP
RINTコマンドを送信する。プリンタエンジン22は
PRINTコマンドを受信すると、印刷を開始する。
【0039】通信プログラム15は次に、演算プログラ
ム14が出力生成した演算データを、後述する通信手順
に基づき、ホストパラレルポート6を経由して送信す
る。
【0040】ラッチ回路18は、プリンタパラレルポー
ト16を経由してこれを受信し、後述する回路によりデ
ータの変化を検出して生成したクロックによりデータを
ラッチするとともに、ラッチしたデータと直前にラッチ
されていたデータの相互間で所定の演算を行い、演算結
果をFIFOメモリ19に格納する。ラッチ回路が行う
所定の演算は、演算プログラム14が行う所定の演算の
逆演算であるので、FIFOメモリ19に格納されるデ
ータは、符号化プログラム13が生成した符号化データ
と等しくなる。
【0041】復号回路20は、後述する復号手順に基づ
き、FIFOメモリ19に格納された符号化データを復
号してシフトレジスタ21に出力する。シフトレジスタ
21は主走査の長さをカウントするカウンタを持ち、プ
リンタエンジン22が出力するBD信号により主走査の
開始が通知される毎に、カウンタに所定の値を設定した
後、カウンタが「0」より大である間、所定のタイミン
グで復号回路20が出力したパラレルデータをシリアル
データに変換し、プリンタエンジン22に出力するとと
もにカウンタを減算する。プリンタエンジン22は用紙
が所定の位置に達すると、主走査開始毎にBD信号を出力
することにより、データの出力が必要であることを通知
するとともに、シフトレジスタ21が出力したシリアル
データに基づき、印刷を行う。
【0042】次に、図3に示すテーブルを参照し、図2
に示した符号化プログラム13が生成する符号について
説明する。なお、本実施形態で使用されている符号はラ
ンレングス符号の一種である。
【0043】図3は、図2に示した符号化プログラム1
3が生成する符号化テーブルの一例を示す図である。
【0044】図3に示すように、コマンドコードCが
「0」から「0x3F」までの場合は特定のデータバイ
ト「0x40」の繰り返しコマンドであり、「0x4
0」がコマンドコードCによって決められた繰り返しの
長さだけ繰り返されることを指定する。繰り返しの長さ
は「C+1」である。例えば、符号「1」は長さ2の繰
り返しを示し、2バイトのデータ「0x40」「0x4
0」を表現する。このコマンドにより、特定のデータバ
イト「0x40」の繰り返しを、符号バイト中に特定の
データバイト「0x40」を含むことなく符号化するこ
とができる。
【0045】コマンドコードCが「0x40」から「0
x7F」までの場合は任意データの繰り返しコマンドで
あり、次に続く1バイトのデータが、コマンドコードC
によって決められた繰り返しの長さだけ繰り返されるこ
とを指定する。繰り返しの長さは、「C−0x3F」で
ある。例えば符号「0x41」「0x55」は2バイト
のデータ「0x55」「0x55」を表現する。
【0046】コマンドコードCが「0x80」から「0
xBF」までの場合は生データコマンドであり、コマン
ドコードCによって決められた長さの生データが次に続
くことを指定する。生データの長さは、「C−0x7
F」である。例えば符号「0x80」「0x66」は1
バイトのデータ「0x66」を表現する。
【0047】コマンドコードCが「0xC0」から「0
xFF」までの場合は、特定のデータバイト「0x4
0」の後に、コマンドコードCによって決められた長さ
の生データが次に続くことを指定する。生データの長さ
は、「C−0xBF」である。例えば符号「0xC0」
「0x77」は2バイトのデータ「0x40」「0x7
7」を表現する。
【0048】このコマンドにより、生データコマンドに
符号化すべき系列中に特定のデータバイト「0x40」
が出現した場合でも、圧縮率を悪化することなしに、か
つ符号バイト中に特定のデータバイト「0x40」を含
むことなく符号化することができる。この値「0x4
0」は、送信データを作成するための後述する演算に用
いられる。この演算によって、同じ値の符号化データが
連続しないことが保証される。
【0049】例えば、系列「0x3F」「0x40」
「0x41」をランレングス符号化する場合、一つの生
データコマンドに符号化、すなわち「長さ3の生デー
タ」「0x3F」「0x40」「0x41」の4バイト
に符号化することが一般的である。しかしながら、この
符号では特定のデータバイト「0x40」を符号バイト
に含めることができないため、このコマンド(コマンド
コード0xC0〜0xFF)がなければ、「0x80
(長さ1の生データ)」「0x3F」「0(長さ1の0
x40)」「0x80(長さ1の生データ)」「0x4
1」の5バイトの符号に符号化しなければならず、圧縮
率が悪化する。このコマンドの採用により、「0x80
(長さ1の生データ)」「0x3F」「0xC0(長さ
1の0x40+長さ1の生データ)」「0x41」の4
バイトの符号に符号化することができ、圧縮率の悪化を
防ぐことができる。
【0050】上記の符号化手順を用いると、同一データ
が連続してはならないという制約を受けないため、効率
的に符号化を行うことができる。そのかわりに特定値の
データバイトを含んではならないという制約を受ける
が、前記特定値のデータバイトは0以外であれば任意に
選ぶことができる。元データの分布にはかたよりがある
のが普通なので、元データに含まれる頻度が小さい値を
前記特定値として選ぶことにより、圧縮率の悪化を防ぐ
ことができる。さらに、前記特定値のデータバイトの後
に、コマンドコードによって決められた長さの生データ
が次に続くことを指定するコマンドにより、元データに
前記特定値のデータバイトが含まれる場合であっても、
圧縮率の悪化を防ぐことができる。
【0051】次に、図4を参照し、図2に示した演算プ
ログラム14が行う演算について説明する。図4の上段
は符号化プログラム13が生成した一連の符号データ
「A1」「A2」「A3」…「Ai」…を示す。また、図4
の下段は演算プログラム15が出力する一連の演算デー
タ「B0」「B1」「B2」「B3」…「Bi」…を示す。
【0052】図4に示すように、演算プログラム15は
まず、任意のデータバイト「B0」を出力する。次に、
直前に出力したデータバイト「B(i-1)」と、符号化デ
ータ「Ai」と、特定のデータバイト「0x40」との
排他的論理和を順次計算し、計算結果を出力する。例え
ば、符号化データ「A2」に対応する演算データ「B2」
は、直前に出力したデータバイト「B1」と、符号化デ
ータ「A2」と、特定のデータバイト「0x40」との
排他的論理和となる。なお、図中、「○」と「+」を組
み合わせた記号は排他的論理和演算を示す記号である。
この記号は、明細書においては「(+)」と記載する。ま
た、B(i)とBiとは同じものである。
【0053】ここで、符号化データ「Ai」は、特定の
データバイト「0x40」を含まないように符号化され
ているため「Ai」は「0x40」ではなく、「Ai」と
「0x40」の排他的論理和「Ai(+)0x40」は0
以外の値となる。このため、演算プログラム15が出力
する演算データ「Bi」は、「B(i-1)」と、0でない値
を持つ「Ai(+)0x40」との排他的論理和であるた
め、必ず「B(i-1)」と異なったデータとなり、隣接す
る演算データが同一の値になることはない。
【0054】次に、図5を参照し、図2に示したプリン
タ7のラッチ回路18が行う演算について説明する。図
5の上段はラッチ回路18が受信し、ラッチした一連の
受信データ「B0」「B1」「B2」「B3」…「Bi」…
を示す。この一連の受信データは、演算プログラム14
が出力した演算データと同一である。また、図5の下段
はラッチ回路が出力し、FIFOメモリ19に格納され
る一連のデータ「C1」「C2」「C3」…「Ci」…を示
す。
【0055】図5に示すように、演算プログラム14は
まず、先頭ののデータバイト「B0」をラッチする。次
に、1バイト受信毎に、直前にラッチしていたデータバ
イト「B(i-1)」、新たにラッチした受信データ「B
i」、および特定のデータバイト「0x40」の排他的
論理和を順次計算し、計算結果を出力する。例えば、受
信データ「B2」に対応する出力データ「C2」は、直前
にラッチしていたデータバイト「B1」、受信データ
「B2」、および特定のデータバイト「0x40」の排
他的論理和となる。すなわち「C2」=「B1(+)B2
(+)0x40」であり、一方上述のように「B2」=
「B1(+)A2(+)0x40」であるので、これを計算す
ると「C2」=「B1(+)(B1(+)A2(+)0x40)
(+)0x40」=「(B1(+)B1)(+)A2(+)(0x
40(+)0x40)」=「0(+)A2(+)0」=「A2」
となり,対応する符号化データと等しい出力データが得
られる。このように、ラッチ回路18では、入力データ
Biから、ホストコンピュータ1により生成された符号
化データAiと同じ値のデータCiを得ることができる。
【0056】<符号化手順の詳細>次に、図6に示すプ
ログラムリスト及び図12〜図14のフローチャートを
参照し、符号化プログラム13の符号化手順の詳細を説
明する。
【0057】図6は、図2に示した符号化プログラム1
3の符号化手順の詳細を説明する図であり、C言語で記
述された関数である。
【0058】図において、行1は関数名、引数、および
戻り値の型を定義する。この関数の関数名はencod
eであり、呼び元からビットマップデータの先頭アドレ
スをポインタsrcに、符号化データを格納するバッフ
ァの先頭アドレスをポインタdstに、ビットマップデ
ータのバイト数を変数sizeに受け取り、ポインタs
rcの指し示すビットマップデータを符号化して符号化
データをポインタdstの指し示すバッファに格納し、
戻り値としてdstの指すバッファに格納したバイト数
を返す。なお、表記“*x”は、ポインタxで指し示さ
れるアドレスの内容(バイト)を表している。
【0059】符号化処理の過程で先頭アドレスsrc、
先頭アドレスdst、バイト数sizeは各々未処理の
ビットマップデータの先頭アドレス、未処理のバッファ
の先頭アドレス、未処理のビットマップデータのバイト
数を示すように更新される。
【0060】行3から行5は一時変数dsttop、c
md、lenを定義する。dsttopは関数enco
deが呼び出されたときの符号化データを格納するバッ
ファの先頭アドレスdstを記憶する。cmdは処理中
の符号のコマンドを格納する。lenは処理中の生デー
タの長さ、または繰り返しの長さを格納する。
【0061】関数encodeが呼び出されると、行3
でバッファの先頭アドレスdstの値をdsttopに
格納し、未処理のビットマップデータのバイト数siz
eが0になるまで、行6から行40までのwhileル
ープを繰り返す。whileループとは、情感が満足さ
れる限り繰り返される処理ループである。
【0062】行6から行40までのwhileループで
は、まず行7にて未処理のビットマップデータのバイト
数sizeが1より大であり、かつ*src即ち未処理
のビットマップデータの先頭バイトと*(src+1)
即ちその次のバイトが同一データであるかを判定する。
1より大であり、かつ先頭の2バイトが同一データであ
れば、繰り返しコマンドに符号化する場合なので、繰り
返しの長さの最大値64または未処理のビットマップデ
ータのバイト数sizeに達するまで、行8から行10
までのforループを繰り返すことにより、ランの長さ
を求める。forループもまた条件が満足される限り繰
り返されるループである。
【0063】forループ中、行9にて、*srcすな
わち未処理のビットマップデータの先頭バイトと*(s
rc+len)すなわち未処理のビットマップデータの
len番目のバイトが等しくない場合は、同一データが
連続しなくなった場合なので、forループを終了す
る。forループ終了時点では、lenには繰り返しの
長さが格納されている。
【0064】次に行11にて、*srcすなわち繰り返
されているビットマップデータの先頭データが0x40
であるかを判定する。*srcが0x40の場合は、行
12にてぽいんたdstが指すバッファに、長さlen
の0x40の繰り返しを示すコマンドであるlen−1
を格納してポインタdstを1つ進める。*srcが0
x40でない場合は、行14にてポインタdstが指す
バッファに、長さlenの任意のデータの繰り返しを示
すコマンドであるlen+0x3fを格納してポインタ
dstを1つ進め、行15にてポインタdstが指すバ
ッファに、繰り返すべきデータである*srcを格納し
てポインタdstを1つ進める。いずれの場合も、行1
7にて未処理のビットマップデータの先頭アドレスsr
cに繰り返しの長さlenを加え、未処理のビットマッ
プデータのバイト数sizeから繰り返しの長さlen
を引く。次に行18のcontinue文により、wh
ileループの先頭である行6に戻る。
【0065】行7にて、未処理のビットマップデータの
バイト数sizeが1であるか、または*src即ち未
処理のビットマップデータの先頭バイトと*(src+
1)即ちその次のバイトが同一データでないと判定され
た場合は、行20にて*srcが0x40であるかを判
定する。*srcが0x40であった場合は、行21に
進み、未処理のビットマップデータのバイト数size
が1であるか、またはsizeが2より大でかつ*(s
rc+1)すなわち0x40の次のバイトと*(src
+2)すなわちさらにその次のバイトが等しいかを判定
する。
【0066】未処理のビットマップデータのバイト数s
izeが1であった場合は、後続のデータがないので、
長さ1の0x40を示すコマンドに符号化しなければな
らない。また、sizeが2より大でかつ0x40の次
の2バイトが同一であった場合は、その同一の2バイト
のデータは繰り返しとして符号化したほうが有利である
ので、やはり長さ1の0x40を示すコマンドに符号化
する。これら2つの場合は、行22に進み、dstが指
すバッファに、長さ1の0x40の繰り返しを示すコマ
ンドである0を格納してdstを1つ進め、行23にて
未処理のビットマップデータの先頭アドレスsrcに繰
り返しの長さ1を加え、未処理のビットマップデータの
バイト数sizeから繰り返しの長さ1を引く。次に行
24のcontinue文により、whileループの
先頭である行6に戻る。
【0067】行21にて、未処理のビットマップデータ
のバイト数sizeが2の場合、または0x40の次の
2バイトが同一でなかった場合は行26に進み、0x4
0の次のデータの処理を行うために、未処理のビットマ
ップデータの先頭アドレスsrcに1を加え、未処理の
ビットマップデータのバイト数sizeから1を引く。
次に行27にてコマンドコードcmdに長さ1の0x4
0の後に生データが後続することを示すために0xbf
を格納する。
【0068】行20にて、*srcが0x40でないと
判定された場合は行29にてコマンドコードcmdに生
データであることを示すために0x7fを格納する。
【0069】いずれの場合も行31に進み、生データの
長さの最大値64または未処理のビットマップデータの
バイト数sizeに達するまで、行31から行36まで
のforループを繰り返すことにより、生データの長さ
を求める。forループ中、行32にて、*(src+
len)が0x40の場合、そのデータを生データの中
に含めることができないため、forループを終了す
る。また、行33にて、生データの長さlenに2を加
算した値が、未処理のビットマップデータのバイト数s
izeより小さく、かつ*(src+len)が*(s
rc+len+1)と等しい、すなわち同一データが隣
接している場合は、行34にてさらに*(src+le
n)が*(src+len+2)と等しいかを判定す
る。生データの長さlenに2を加算した値が、未処理
のビットマップデータのバイト数sizeより小さく、
かつ*(src+len)が*(src+len+1)
および*(src+len+2)に等しい場合は、同一
データが3バイト連続しているので、その同一データを
繰り返しコマンドに符号化するためにforループを終
了する。forループ終了時点では、lenには生デー
タの長さが格納されている。
【0070】次に行37にてdstが指すバッファに、
長さ1の0x40に生データが後続することを示すか、
または長さlenの生データを示すコマンドであるle
n+cmdを格納してdstを1つ進める。次に行38
にて未処理のビットマップデータのバイト数sizeか
ら繰り返しの長さlenを引く。
【0071】次に行39のwhileループにて、未処
理のビットマップデータの先頭アドレスsrcから未処
理のバッファの先頭アドレスdstに、生データの長さ
lenによって示される長さの生データを転送するとと
もに、未処理のビットマップデータの先頭アドレスsr
c、および未処理のバッファの先頭アドレスdstを転
送したバイト数だけ進める。次にwhileループの先
頭である行6に戻る。
【0072】すべてのデータの処理を終えて、未処理の
ビットマップデータのバイト数sizeが0になると、
行6から行40までのwhileループを終了し、行4
1にてdst即ちバッファの終了アドレスからdstt
op即ちバッファの先頭アドレスを引くことによりバッ
ファに格納したバイト数を求め、それを戻り値として関
数を終了する。
【0073】次に、図7に示すプログラムリストを参照
し、演算プログラム14の演算手順の詳細を説明する。
【0074】図7は、図2に示した演算プログラム14
の演算手順の詳細を説明する図であり、これもC言語で
記述された関数で構成される。
【0075】図において、行1は関数名、引数、および
戻り値の型を定義する。この関数の関数名はopera
teであり、呼び元から符号化データの先頭アドレスs
rc、演算データを格納するバッファの先頭アドレスd
st、および符号化データのバイト数sizeを受け取
り、符号化データに演算を施してバッファに格納し、戻
り値は何も返さない。
【0076】演算処理の過程で先頭アドレスsrc、先
頭アドレスdst、バイト数sizeは各々未処理の符
号化データの先頭アドレス、未処理のバッファの先頭ア
ドレス、未処理の符号化データのバイト数を示すように
更新される。
【0077】関数operateが呼び出されると、ま
ず行3にてdstが指すバッファに、先頭の任意のデー
タとして0x00を格納してdstを1つ進める。次に
行4に進み、未処理の符号化データのバイト数size
が0になるまで、行4から行7までのwhileループ
を繰り返す。
【0078】行4から行7までのwhileループで
は、行5にて符号化データ*src、直前に出力した演
算データ*(dst−1)、および特定のデータバイト
0x40の排他的論理和を計算し、dstが指すバッフ
ァに格納する。次に行6にて先頭アドレスsrc、先頭
アドレスdstに1を加算し、未処理の符号化データの
バイト数sizeから1を減算し、whileループの
先頭である行4に戻る。
【0079】すべてのデータの処理を終えて、未処理の
符号化データのバイト数sizeが0になると、行4か
ら行7までのwhileループを終了し、関数を終了す
る。
【0080】<フローチャートの説明>図6及び図7で
説明した処理を、図12〜図16のフローチャートによ
り再度説明する。
【0081】関数encodeが呼び出されると、ステ
ップS1101において、未処理のビットマップデータ
のバイト数sizeが1より大であるか判定される。大
であれば、ステップS1102に分岐する。そうでなけ
ればステップS1109に分岐する。
【0082】ステップS1102では、sizeが2以
上であり、かつ、*src即ち未処理のビットマップデ
ータの先頭バイトと、*(src+1)即ちその次のバ
イトとが同一データであるかを判定する。先頭の2バイ
トが同一データであれば、繰返しの長さlenに初期値
として2を入れ(ステップS1103)、ステップS1
104,S1105,S1110により、繰返しの長さ
を求める。そのために、ステップS1104において繰
り返しの長さの最大値64または未処理のビットマップ
データのバイト数sizeに達するか、あるいは、ステ
ップS1105において、*srcすなわち未処理のビ
ットマップデータの先頭バイトと、*(src+le
n)すなわち未処理のビットマップデータの先頭から第
len番目のバイトとが等しくなくなるまで、ステップ
S1101で変数lenの値を1ずつ増分する。このル
ープ終了時点では、lenには繰り返しの長さが格納さ
れている。
【0083】次に、ステップS1106において、*s
rcすなわち未処理のビットマップデータの先頭バイト
が0x40であるかを判定する。*srcが0x40の
場合は、0x40が繰り返されているため、ステップS
1107において、ポインタdstが指すバッファに、
長さlenの0x40の繰り返しを示すコマンドである
“len−1”を格納してポインタdstを1つ進め
る。*srcが0x40でない場合は、ステップS11
11にて、ポインタdstが指すバッファに、長さle
nの0x40以外のデータの繰り返しを示すコマンドで
ある“len+0x3f”を格納し、ポインタdstを
1つ進め、*dstすなわちポインタdstが指すバッ
ファに、繰り返すべきデータである*srcを格納して
ポインタdstを1つ進める。
【0084】いずれの場合も、ステップS1108に
て、未処理のビットマップデータの先頭アドレスsrc
に繰り返しの長さlenを加え、未処理のビットマップ
データのバイト数sizeから繰り返しの長さlenを
引いて、繰返し部分を処理済みとする。この後、ステッ
プS1101に戻る。
【0085】一方、ステップS1102において、未処
理のビットマップデータのバイト数sizeが1である
か、または*src即ち未処理のビットマップデータの
先頭バイトと*(src+1)即ちその次のバイトが同
一データでないと判定された場合は、ステップS111
2に進む。ステップS1112においては、*srcす
なわち未処理のビットマップデータの先頭のバイトが0
x40であるかを判定する。*srcが0x40であっ
た場合は、ステップS1113に進み、未処理のビット
マップデータのバイト数sizeが1であるか、または
sizeが3以上で、かつ*(src+1)すなわち0
x40の次のバイトと*(src+2)すなわちさらに
その次のバイトが等しいかを判定する。
【0086】未処理のビットマップデータのバイト数s
izeが1であった場合は、後続のデータがないので、
長さ1の0x40を示すコマンドに符号化しなければな
らない。また、sizeが2より大で、かつ0x40の
次の2バイトが同一であった場合は、その同一の2バイ
トのデータは繰り返しとして符号化したほうが有利であ
るので、*srcは、やはり長さ1の0x40を示すコ
マンドに符号化される。これら2つの場合は、ステップ
S1121に進み、ポインタdstが指すバッファに、
長さ1の0x40の繰り返しを示すコマンドである0を
格納して、ポインタdst及びポインタsrcをそれぞ
れ1つ進め、未処理のビットマップデータのバイト数s
izeから繰り返しの長さ1を引く。この後ステップS
1101に戻る。
【0087】一方、ステップS1113において、未処
理のビットマップデータのバイト数sizeが2の場
合、または0x40の次の2バイトが同一でなかった場
合はステップS1114に進む。ステップS1114に
おいては、0x40の次のデータの処理を行うために、
未処理のビットマップデータの先頭アドレスsrcに1
を加え、未処理のビットマップデータのバイト数siz
eから1を引き、変数cmdに長さ1の0x40の後に
生データが後続することを示すためのコマンド0xbf
を格納する。
【0088】ステップS1112にて、*srcすなわ
ち未処理のビットマップデータの先頭バイトが0x40
でないと判定された場合は、ステップS1120にて、
変数cmdに生データが後続することを示すコマンド0
x7fを格納する。
【0089】いずれの場合もステップS1115に進み
変数lenに初期値として1を設定しておく。その後、
ステップS1116において、コマンド0x7fあるい
は0xbfに後続するデータの長さの最大値64に達し
たか、または未処理のビットマップデータの処理をすべ
て終えたかを判定する。いずれも満たされていなけれ
ば、ステップS1117〜ステップS1119,ステッ
プS1122において、コマンドに後続するデータ長を
求める。
【0090】ステップS1117においては、*(sr
c+len)すなわち、未処理のビットマップデータの
先頭からlen番目のバイトが0x40であるか判定す
る。0x40の場合、そのデータを生データの中に含め
ることができないため、ここでループを終了して、デー
タをいったん切る。また、ステップS1118におい
て、生データの長さlenに2を加算した値が未処理の
ビットマップデータのバイト数sizeより小さく、か
つ*(src+len)すなわち未処理のビットマップ
データの先頭からlen番目のバイトが、*(src+
len+1)すなわちその次のバイトと等しい場合は、
ステップS1119にて、さらに*(src+len)
が*(src+len+2)と等しいかを判定する。ス
テップS1118及びステップS1119の条件のいず
れかが満たされない場合には、ステップS1122でl
enに1加算して、ステップS1116から処理が繰り
返される。
【0091】ステップS1118及びステップS111
9の条件がともに満足される場合には、生データの長さ
lenに2を加算した値が、未処理のビットマップデー
タのバイト数sizeより小さく、かつ*(src+l
en)が*(src+len+1)および*(src+
len+2)に等しく、同一データが3バイト連続して
いる。このため、その同一データを繰り返しコマンドに
符号化するためにステップS1123に進む。ステップ
S1123に進んだ時点では、変数lenには生データ
の長さが格納されている。
【0092】次にステップS1123にて、ポインタd
stが指すバッファに、長さ1の0x40に生データが
後続することを示すか、または長さlenの生データを
示すコマンドであるlen+cmdを格納してポインタ
dstを1つ進める。また、未処理のビットマップデー
タのバイト数sizeから繰り返しの長さlenを引
く。
【0093】次にステップS1124及びステップS1
125において、未処理のビットマップデータの先頭ア
ドレスsrcからポインタdstにより指し示されるバ
ッファに、長さlenによって示される長さの生データ
を、未処理のビットマップデータの先頭アドレスsr
c、および未処理のバッファの先頭アドレスdstを1
ずつ進め、長さlenを1ずつ減らしながら転送する。
長さlenの転送が終えたなら、ステップS1101に
戻る。
【0094】一方、ステップS1101においてsiz
eが0以下であると判定されると、すなわち、すべての
データの処理を終えて、未処理のビットマップデータの
バイト数sizeが0になると、ステップS1109に
て、ポインタsrcで指し示されるバッファに格納した
バイト数を求め、それを戻り値として関数encode
を終了する。
【0095】以上の手順により、元のデータ(生デー
タ)を、0x40が含まれない符号化データに変換する
ことができる。
【0096】次に、図15に示すフローチャートを参照
し、演算プログラム14の演算手順の詳細を説明する。
【0097】図15は、図2及び図7に示した演算プロ
グラム14の演算手順の詳細を説明する図である。
【0098】図において、関数operateは、引数
として、符号化データのアドレス、演算済みデータを格
納するためのバッファのアドレス、符号化データの長さ
を与えられ、それぞれはポインタsrc,ポインタds
t,変数sizeに渡される。
【0099】まずステップS1401において、ポイン
タdstが指すバッファに、先頭のデータとして0x0
0を格納してポインタdstを1つ進める。先頭のデー
タは0x00としたが、特に値は問わない。次にステッ
プS1402に進み、未処理の符号化データのバイト数
sizeが0になるまで、ステップS1403を繰り返
す。
【0100】ステップS1403においては、符号化デ
ータ*srcと、直前に出力した演算データ*(dst
−1)と、特定のデータバイト0x40との排他的論理
和を計算し、ポインタdstが指すバッファに格納す
る。次にポインタsrc及びポインタdstに1を加算
し、未処理の符号化データのバイト数sizeから1を
減算する。
【0101】すべてのデータの処理を終えて、未処理の
符号化データのバイト数sizeが0になると、関数を
終了する。
【0102】以上の手順により、連続する符号化データ
が同一にならないことを保証する。上記図12乃至図1
5の手順において、定数0x40を0以外の所望の値に
変えることで、その所望の値が含まれない符号化データ
を生成し、その所望の値を用いて、連続する2バイトが
同一の値を持たないことを保証できる。
【0103】<通信処理手順>次に、図8を参照し、図
2に示したホストコンピュータ1とプリンタ7とのデー
タ通信処理手順について説明する。
【0104】図8は、図2に示したホストコンピュータ
1とプリンタ7とのデータ通信処理を示すタイミングチ
ャートである。
【0105】図において、通信プログラム15は、演算
プログラム14から隣接するデータバイトが同一になる
ことがないように演算された演算データ列を受け取る
と、タイミングT0でホストパラレルポート6に演算デ
ータ列の先頭バイト「0x00」を出力後、タイミング
T1で制御信号nStrobeに「L」を出力する。
【0106】プリンタパラレルポート16は制御信号n
Strobeの立ち下がりを検出し、ホストコンピュー
タから出力されたデータを受信する。受信したデータが
演算データ列の送信開始を示すコマンド「0x00」で
あった場合には、FIFOメモリ19に転送ブロックサ
イズの最大値である8KB以上の空きがあるときには状
態信号Busyを「L」のまま保ち、そうでない場合は
図中点線で示すように0.5マイクロ秒以内に状態信号
Busyに「H」を出力する。
【0107】通信プログラム15は制御信号nStor
obeに「L」を出力してから1マイクロ秒以上待ち、
状態信号Busyを読む。状態信号Busyが「H」で
あった場合は、プリンタのFIFOメモリ19に転送ブ
ロックサイズの最大値である8KB以上の空きがないの
で、状態信号Busyが「L」になるまで待つ。また、
通信プログラム15は、状態信号Busyが「H」であ
る場合、制御信号nStorobeを「H」に戻して演
算データ列の送信開始を取り消すこともできる。プリン
タパラレルポート16は、通信プログラム15が制御信
号nStorobeを「H」に戻す前に、FIFOメモ
リ19に転送ブロックサイズの最大値である8KB以上
の空きができたときには、状態信号Busyに「L」を
出力する。
【0108】ホストコンピュータの通信プログラム15
は、状態信号Busyが「L」であることを検出する
と、転送ブロックサイズの最大値である8KBを超えな
い範囲で、演算データを1マイクロ秒以上の間隔で順次
送信する。このとき制御信号を変化させずにデータ信号
のみを変化させるので、きわめて高速にデータを送信す
ることができる。
【0109】演算データはプリンタパラレルポート16
を経由してラッチ回路18に供給される。ラッチ回路1
8は、制御信号nStorobeが「L」に変化したと
きにデータのラッチを行う。また、ラッチ回路18は、
8ビットのデータ信号のうちいずれかの変化を検出する
とクロックを生成し、そのクロックに同期してデータの
ラッチを行う。なお、データ信号の立ち上がり時間と立
ち下がり時間には違いがあるのが普通なので、データ信
号の変化の検出時にデータを直ちにラッチしてしまうと
誤ったデータをラッチすることがある。これを避けるた
め、データのラッチはデータ信号の変化の検出から0.
5マイクロ秒後に行う。ラッチ回路18がラッチしたデ
ータは前述の所定の演算を施したうえでFIFOメモリ
19に書き込まれる。
【0110】通信プログラム15は1ブロックのデータ
を転送し終えると、タイミングT2で制御信号nSto
robeを「H」に戻す。プリンタパラレルポート16
はこれに応答し、状態信号nAckを「L」、「H」と
変化させるとともに状態信号Busyが「H」であれば
「L」を出力する。
【0111】<符号化データの再生及びクロックの生成
>次に、図9を参照し、ラッチ回路18の構成および動
作について詳細に説明する。
【0112】図9は、図2に示したラッチ回路18の詳
細を示す回路図である。
【0113】図において、フリップフロップ30は8ビ
ットのDフリップフロップであり、入力に加えられた、
プリンタパラレルポート16からのデータ信号Data
1からデータ信号Data8を、例えば0.1マイクロ
秒周期のシステムクロックSCLKの立ち上がりエッジ
でサンプルしてラッチし、出力Q11から出力Q18に
出力する。
【0114】フリップフロップ31は8ビットのDフリ
ップフロップであり、入力に加えられた出力Q11から
出力Q18の信号を、例えば0.1マイクロ秒周期のシ
ステムクロックSCLKの立ち上がりエッジでサンプル
してラッチし、出力Q21から出力Q28に出力する。
【0115】ゲート32は2入力8回路のエクスクルー
シブオア回路であり、8ビットのDフリップフロップの
出力Q11から出力Q18の信号と、8ビットのDフリ
ップフロップの出力Q21から出力Q28の信号との排
他的論理和演算を行い、演算結果を出力X1から出力X
8に出力する。
【0116】ゲート40は8入力のオア回路であり、エ
クスクルーシブオア回路32の出力である出力X1から
出力X8の論理和演算を行い、その演算結果を出力Yに
出力する。ゲート41はアンド回路であり、プリンタパ
ラレルポート16から供給される符号列の受信中を示す
信号BLKと、上記出力Yと、SRフリップフロップ4
3の出力である出力Qとの論理積演算を行い、演算結果
を出力Zに出力する。
【0117】シフトレジスタ42は、出力Zの信号を、
例えば0.5マイクロ秒遅延してクロックCLKに出力
する。クロックCLKは書き込み信号WRとしてFIF
Oメモリ19に供給される。これにより、クロック信号
CLOCK発生のタイミングが、データ信号の変化から
0.5秒遅延される。
【0118】フリップフロップ43はSRフリップフロ
ップであり、出力ZおよびクロックCLKをSCLKの
立ち上がりエッジでサンプルし、サンプルしたZ信号が
「H」であれば出力Qを「L」に、サンプルしたCLK
信号が「H」であれば出力Qを「H」にする。なお、S
Rフリップフロップ43は、初期状態で「H」に設定す
る。
【0119】ゲート44はオア回路であり、プリンタパ
ラレルポート16から供給される符号列の受信開始を示
す信号BLKSと、クロックCLKとの論理和演算を行
い、演算結果をクロックCLK2として出力する。な
お、BLKS信号は、符号列の受信開始時に単発パルス
として供給される。
【0120】フリップフロップ45は8ビットのDフリ
ップフロップであり、入力に加えられた、出力Q11か
ら出力Q18の信号をクロックCLK2の立ち上がりエ
ッジでサンプルし、ラッチして出力Q31から出力Q3
8に出力する。
【0121】ゲート46は8回路2入力のエクスクルー
シブオア回路であり、出力Q11から出力Q18と、出
力Q31から出力Q38との排他的論理和演算を行い、
その演算結果を出力U1から出力U8に出力する。すな
わち、ゲート46によって、連続する2バイトのデータ
の排他的論理和が計算され、信号U1−U8として出力
される。
【0122】ゲート47は反転回路であり、入力に加え
られた、出力U7の信号を反転して出力V7に出力する
とともに、入力に加えられた、出力U1から出力U6お
よび出力U8の信号をそのまま出力V1から出力V6お
よび出力V8に出力する。すなわち、入力U1−U8と
0x40との排他的論理和を、信号V1−V8として出
力する。
【0123】フリップフロップ48は8ビットのDフリ
ップフロップであり、入力に加えられた、出力V1から
出力V8の信号をクロックCLKの立ち上がりエッジで
サンプルし、ラッチして出力Do1から出力Do8に出
力する。なお、出力Do1から出力Do8は、FIFO
メモリ19に供給される。
【0124】次に、図10および図11を参照し、図9
に示したラッチ回路18の動作例を説明する。
【0125】図10は、ホストコンピュータが制御信号
nStrobeを「H」から「L」に変化させた場合
の、図9に示したラッチ回路18の動作を示すタイミン
グチャートである。図において、点線で描かれた1目盛
は0.1マイクロ秒を示す。
【0126】図において、制御信号nStrobeが
「H」から「L」に変化すると、プリンタパラレルポー
ト16は、システムクロックSCLKの次の立ち上がり
エッジと同期してこれを検出し、ホストコンピュータか
ら出力されたデータ信号を受信する。受信したデータ信
号が演算データ列の送信開始を示すコマンド「0x0
0」であり、かつFIFOメモリ19に転送ブロックサ
イズの最大値である8KB以上の空きがあるときには
0.5マイクロ秒後にBLK信号を「H」にするととも
に、BLKS信号を0.1マイクロ秒間だけ「H」と
し、その後に「L」に戻す。
【0127】一方、BLK信号が「L」の間、Y信号、
BLK信号、およびQ信号の論理積であるZ信号は
「L」となり、Z信号を0.5マイクロ秒遅延させたC
LK信号はBLK信号が「L」から「H」に変化してか
ら0.5マイクロ秒経過するまでは「H」になることは
ない。したがって、BLKS信号とCLK信号の論理和
であるCLK2信号には、BLKS信号と同じ信号が出
力される。
【0128】BLKS信号の立ち上がりに応じてCLK
2信号が立ち上がると、Dフリップフロップ45は入力
に加えられた、出力Q11から出力Q18の信号を、ク
ロックCLK2の立ち上がりエッジでサンプルしてラッ
チし、出力Q31から出力Q38に出力する。データ信
号Data1からデータ信号Data8はこの間演算デ
ータ列の送信開始を示すコマンド「0x00」を保って
おり、データ信号Data1からデータ信号Data8
をシステムクロックSCLKの立ち上がりでサンプル
し、ラッチした信号である出力Q11から出力Q18の
信号もまた「0x00」を保っているので、この値がラ
ッチされて出力Q31から出力Q38までに出力され
る。
【0129】図11は、ホストコンピュータがデータ信
号を変化させた場合の、図9に示したラッチ回路18の
動作を示すタイミングチャートである。
【0130】図において、データ信号Data1が
「H」から「L」に変化すると、システムクロックSC
LKの次の立ち上がりエッジに同期してDFF30の出
力Q11が「H」から「L」に、システムクロックSC
LKのその次の立ち上がりエッジに同期して、DFF3
1の出力Q21が「H」から「L」に変化する。出力Q
11が「L」に変化してから出力Q21が「L」に変化
する間、ゲート32の出力X1は「H」となる。同様
に、立ち上がり時間と立ち下がり時間の差のために、デ
ータ信号Data1の変化に遅れて、データ信号Dat
a2が「L」から「H」に変化すると、システムクロッ
クSCLKの次の立ち上がりエッジに同期してDFF3
0の出力Q12が「L」から「H」に、システムクロッ
クSCLKのその次の立ち上がりエッジに同期してDF
F31の出力Q22が「L」から「H」に変化する。出
力Q12が「H」に変化してから出力Q22が「H」に
変化する間、ゲート32の出力X2は「H」となる。こ
れに伴い、出力Yは出力X1または出力X2のいずれか
が「H」である間、「H」となる。
【0131】符号列の受信中を示す信号BLKが「H」
であれば、SRフリップフロップ43の出力Qは最初は
「H」となっているので、出力X1および出力Yが
「H」に変化するに伴ってアンド回路41の出力Zが
「H」に変化する。出力Zが「H」に変化すると、シス
テムクロックSCLKの次の立ち上がりエッジに同期し
てSRフリップフロップ43の出力Qが「L」に変化す
る。
【0132】そして、SRフリップフロップ43の出力
Qが「L」になるとオア回路40の出力Yの状態にかか
わらず、アンド回路41の出力Zは「L」となるので、
出力X2および出力Yが「H」に変化しても、「L」の
状態を保つ。シフトレジスタ42により、出力Zから
0.5マイクロ秒遅れて、クロックCLKが「L」から
「H」に変化すると、オア回路44の出力CLK2もま
た「L」から「H」に変化し、Dフリップフロップ45
は入力された、出力Q11から出力Q18の信号をラッ
チして、出力Q31から出力Q38に出力する。
【0133】また、クロックCLKが「L」から「H」
に変化すると、Dフリップフロップ48は入力された、
出力V1から出力V8の信号をラッチして、出力Do1
から出力Do8に出力し、FIFOメモリ19に供給す
る。
【0134】さらに、システムクロックSCLKの次の
立ち上がりエッジに同期して、SRフリップフロップ4
3の出力Qが「H」に変化する。クロックCLKは出力
Zから0.5マイクロ秒遅れて「H」から「L」に変化
するたので、元の状態に復帰し、次のデータ信号の変化
の検出の準備が整う。
【0135】クロックCLKが「L」から「H」に変化
する直前では、Dフリップフロップ45の出力Q31か
らQ38には最後にラッチされた前回の受信データが、
Dフリップフロップ30の出力Q11からQ18にはD
フリップフロップ45がこれからラッチしようとしてい
る今回の受信データが出力されている。したがって、エ
クスクルーシブオア回路46の出力U1から出力U8に
は、前回および今回の受信データの排他的論理和が出力
されている。また、反転回路47の出力V1から出力V
8には、入力された出力U1から出力U8のうち出力U
7のみを反転したデータ、すなわち出力U1から出力U
8と固定値「0x40」との排他的論理和が出力されて
いる。従って、クロックCLKが「L」から「H」に変
化したときにDフリップフロップ48がラッチして出力
するデータは、「前回の受信データ」(+)「今回の受信
データ」(+)「0x40」となり、このデータがFIF
Oメモリ19に格納される。
【0136】上述の説明では、最初にデータ信号Dat
a1が「H」から「L」に変化した場合であるが、
「L」から「H」への変化、あるいはデータ信号Dat
a1以外のデータ信号の変化であっても同様に動作す
る。このため、いずれかのデータ信号が変化すればこれ
を検出し、クロックCLKを生成することができる。
【0137】<復号処理手順>次に、図2に示した復号
回路20の復号手順の詳細を、図16及び図17を参照
して説明する。
【0138】シフトレジスタ21からデータが要求され
ると、復号回路20はFIFOメモリ19から1バイト
の符号化データのコマンドを読む(ステップS160
1)。コマンドコードCが「0」から「0x3F」、す
なわち「長さ(C+1)の0x40の繰り返し」であっ
た場合は(ステップS1602−YES)、コマンドコ
ードCから繰り返し長を計算してカウンタに設定し(ス
テップS1603)、「0x40」をデータレジスタに
格納する(ステップS1604)。然る後に、カウンタ
が「0」より大である間、シフトレジスタ21からデー
タが要求される毎にデータレジスタに格納されているデ
ータを出力し、カウンタから「1」を減算する(ステッ
プS1605−S1607)。
【0139】コマンドコードCが「0x41」から「0
x7F」、すなわち「長さ(C−0x3F)の繰り返
し」であった場合は(ステップS1608−YES)、
コマンドコードCから繰り返し長を計算してカウンタに
設定し(ステップS1609)、FIFOメモリ19か
ら次の1バイトのデータを読んでデータレジスタに格納
する(ステップS1610)。然る後に、カウンタが
「0」より大である間、シフトレジスタ21からデータ
が要求される毎にデータレジスタに格納されているデー
タを出力し、カウンタから「1」を減算する(ステップ
S1605−S1607)。
【0140】コマンドコードCが「0x80」から「0
xBF」、すなわち「長さ(C−0x7F)の生デー
タ」であった場合は(ステップS1611−YES)、
コマンドコードCから生データ長を計算してカウンタに
設定する(ステップS1612)。然る後に、カウンタ
が「0」より大である間、シフトレジスタ21からデー
タが要求される毎にFIFOメモリ19から1バイトの
データを読んでそのデータを出力し、カウンタから
「1」を減算する(ステップS1613−S161
5)。
【0141】コマンドコードCが「0xC0」から「0
xFF」、すなわち「長さ1の0x40+長さ(C−0
xBF)の生データ」であった場合は(ステップS16
111−NO)、コマンドコードCから生データ長を計
算してカウンタに設定し(ステップS1616)、「0
x40」をデータレジスタに格納する(ステップS16
17)。然る後に、最初にシフトレジスタ21からデー
タが要求された場合にはデータレジスタに格納されてい
るデータを出力し(ステップS1618)、その後はカ
ウンタが「0」より大である間、シフトレジスタ21か
らデータが要求される毎にFIFOメモリ19から1バ
イトのデータを読んでそのデータを出力し、カウンタか
ら「1」を減算する(ステップS1613−S161
5)。
【0142】以上の手順により、ホストコンピュータに
より符号化され、演算されたデータが元通りに復号され
る。
【0143】このように、非同期通信のインターフェー
スを用いて、同期方式のデータ転送を行うことができ
る。特定の値として0x40を定め、ホストコンピュー
タでは、その値が符号化データに含まれないように元の
ビットマップデータを符号化し、符号化されたデータ
を、値0x40を用いて連続するバイトが必ず異なる値
となるように演算して、パラレルインターフェースを介
して送信する。受信側のプリンタでは、並列な受信信号
のいずれか1ビットの変化に応じてクロックを生成し、
そのクロックに同期してデータを受信する。この受信デ
ータを値0x40を用いて元の符号化データに戻し、さ
らにそれを符号化以前のビットマップデータに戻す。こ
のため、1バイト単位でハンドシェイクを行う必要がな
くなり、一連のデータ転送のはじめにだけハンドシェイ
クの手順を踏むだけでよい。その後は、所定時間ごとに
転送すべきデータを通信線上に載せていけば、受信側で
はクロックを作って高速にデータ転送が行える。この
際、連続するバイトデータは必ず異なることが保証され
ているために、受信側では必ず1バイトごとにクロック
を生成でき、確実にデータを受信できる。
【0144】また、連続するデータバイトが互いに異な
ることを保証するための手順に用いられる排他的論理和
演算の1つのオペランドとして、前述した0以外の所定
値(ここでは0x40)が用いられている。この値が含
まれないように元データの符号化が行われるが、「この
所定値(0x40)に続く生データ」というコマンドが
用意されており、また、コマンドコード中にデータ長が
エンコードされているために、符号化率を落とさないで
済む。また、この所定値として、符号化後にもっとも出
現頻度の低い値を選べば、より圧縮率の低下を防止でき
る。
【0145】[実施形態の変形例]なお、上述の実施形
態では、データを表現する符号は「長さnの任意のデー
タの繰り返し」「長さnの0x40の繰り返し」「長さ
nの生データ」「長さ1の0x40の後に長さnの生デ
ータ」であったが、これにかえて、特定のデータバイト
を含まないように符号化できる任意の符号、例えば「長
さmの任意のデータの繰り返し+長さnの生データ」
「長さmの0x40の繰り返し+長さnの生データ」
「長さnの直前の走査のデータのコピー」などを使用し
てもよい。
【0146】また、上述の実施形態では、符号列の送信
開始は、コマンド「0x00」を出力後、制御信号nS
torobeに「L」を出力することにより通知してい
るが、これにかえて任意の方法、例えばIEEE規格
「IEEE Std 1284−1994」に規定され
る拡張リンクモードに入ることにより通知してもよい。
【0147】また、上述の実施形態では、転送ブロック
サイズの最大値である8KB以上の空きがあるか否かを
状態信号Busyを用いてホストコンピュータに通知し
ているが、これにかえて任意の方法、例えばIEEE規
格「IEEE Std 1284−1994」に規定さ
れるニブルモード転送、あるいはECPモード転送でプ
リンタからホストコンピュータにデータを転送すること
により通知してもよい。
【0148】また、上述の実施形態では、符号バイトに
含むことのできない特定のデータバイトは固定であった
が、これにかえて符号化プログラムが元データの分布に
応じて最適なデータバイトをその都度選択し、選択され
た特定のデータバイトに基づいて符号化を行い、さらに
その選択された特定のデータバイトを演算プログラムに
通知し、演算プログラムは選択された特定のデータバイ
トに基づいて演算を行い、さらにその選択された特定の
データバイトを、例えば制御信号nStrobeが立ち
下がったときのデータをもって選択された特定のデータ
バイトとする、あるいは別のコマンドで選択された特定
のデータバイトを指定する等の方法によりラッチ回路に
通知し、ラッチ回路は通知された特定のデータバイトを
保持し、その通知された特定のデータバイトに基づいて
演算を行って演算結果を出力するようにしてもよい。
【0149】また、上述の実施形態では、演算プログラ
ムは2つのデータと0x40との排他的論理和演算を行
っているが、これにかえて特定のデータバイトを含まな
い符号データ列から、同一データが連続しないようなデ
ータ列に変換し、かつ逆演算を持つ任意の演算、例えば
2つのデータの排他的論理和演算、あるいは2つのデー
タの減算を行うようにしてもよい。
【0150】
【発明の効果】以上に説明したように、本発明によれ
ば、汎用のパラレルポートを介して受信するパラレルデ
ータから転送クロックを自動生成でき、従来のようにク
ロックビットをあらかじめ割り当てて転送ビット幅を削
ることなく、転送可能な全てのビットを最大限利用して
所望の出力データを高速に転送できる。
【0151】また、本発明によれば、同一の符号バイト
が連続してはならないという制約を受けないため、固定
のデータバイトの挿入などによる圧縮率の悪化を防ぐこ
とができる。
【0152】また、特定の値を含まないバイトデータに
変換する際に、コマンドコードとして、その特定の値に
連続する生データを表すコードを含み、また、連続する
長さをコマンドコード中に含むため、圧縮率を低下させ
にくい。
【図面の簡単な説明】
【図1】本発明の第1実施形態を示す通信制御装置の構
成を説明するブロック図である。
【図2】本発明に係る通信制御装置を適用可能な印刷シ
ステムの構成を示すブロック図である。
【図3】図2に示した符号化プログラムが生成する符号
化テーブルの一例を示す図である。
【図4】図2に示した符号化プログラムが生成する符
号、および図2に示した演算プログラムが出力する演算
結果の一例を示す図である。
【図5】図2に示したラッチ回路がラッチするデータ、
および演算して出力する演算結果の一例を示す図であ
る。
【図6】図2に示した符号化プログラムの符号化手順の
詳細を示す図である。
【図7】図2に示した演算プログラムの演算手順の詳細
を示す図である。
【図8】図2に示したホストコンピュータとプリンタと
のデータ通信処理を説明するタイミングチャートであ
る。
【図9】図2に示したラッチ回路の詳細を示す回路図で
ある。
【図10】図9に示したラッチ回路の動作を示すタイミ
ングチャートである。
【図11】図9に示したラッチ回路の動作を示すタイミ
ングチャートである。
【図12】符号化プログラムによる符号化手順のフロー
チャートである。
【図13】符号化プログラムによる符号化手順のフロー
チャートである。
【図14】符号化プログラムによる符号化手順のフロー
チャートである。
【図15】演算プログラムによる符号化データの演算処
理手順のフローチャートである。
【図16】復号回路による復号処理のフローチャートで
ある。
【図17】復号回路による復号処理のフローチャートで
ある。
【符号の説明】
1:ホストコンピュータ 2:CPU 6:ホストパラレルポート 7:プリンタ 11:アプリケーションプログラム 12:プリンタドライバプログラム 13:符号化プログラム 14:演算プログラム 15:通信プログラム 16:プリンタパラレルポート 17:制御回路 18:ラッチ回路 19:FIFOメモリ 20:復号回路 21:シフトレジスタ 22:プリンタエンジン
フロントページの続き Fターム(参考) 2C087 AB05 BC05 BC06 BD01 BD40 BD46 CB02 5B021 BB01 DD00 DD20 5B077 AA01 AA16 AA31 GG01 GG16 HH01 MM01 MM02 NN04 NN07 5K034 AA01 CC01 CC06 EE07 EE08 FF02 GG06 HH01 HH16 HH17 HH26 HH36 NN22 NN23 PP01 PP02 PP06

Claims (15)

    【特許請求の範囲】
  1. 【請求項1】 複数のデータ信号線および少なくとも一
    つの制御信号線および少なくとも一つの状態信号線を有
    するパラレルポートと、 前記パラレルポートの任意のデータ信号の変化を検出し
    てクロック信号を生成するクロック生成手段と、 前記クロック生成手段によりクロック信号が生成された
    ときに、前記パラレルポートを介して受信したデータ信
    号を一時記憶するレジスタと、 前記クロック生成手段によりクロック信号が生成される
    前に前記レジスタに一時記憶されていたデータと、前記
    クロック生成手段によりクロック信号が生成されたとき
    に前記レジスタに一時記憶されたデータとの演算を行い
    演算結果を出力する演算器と、 前記演算器が出力した演算結果を記憶する記憶手段と、 前記記憶手段に所定の空き領域があるか否かを示す受信
    可能状態信号を前記パラレルポートの状態信号線または
    データ信号線に出力する受信可能状態信号出力手段とを
    有することを特徴とする通信制御装置。
  2. 【請求項2】 前記記憶手段に記憶されたデータを復号
    する復号手段を有することを特徴とする請求項1記載の
    通信制御装置。
  3. 【請求項3】 複数のデータ信号線および少なくとも一
    つの制御信号線および少なくとも一つの状態信号線を有
    するパラレルポートと、 前記パラレルポートを介して外部に転送すべき元データ
    を解析して特定の値を含まないように符号化データを生
    成する符号化手段と、 前記符号化手段が生成した符号化データに所定の演算を
    行い、演算結果を出力する演算手段と、 前記パラレルポートに接続されている装置が出力する受
    信可能状態信号が所定の大きさのデータを受信可能であ
    ることを示している場合に、前記演算手段により出力さ
    れた演算結果のデータを前記パラレルポートのデータ信
    号線に出力する通信手段とを有することを特徴とする通
    信制御装置。
  4. 【請求項4】 複数のデータ信号線および少なくとも一
    つの制御信号線および少なくとも一つの状態信号線を有
    するパラレルポートを介して外部に転送すべき元データ
    を解析して特定のデータバイトを含まないように符号化
    データを生成する符号化工程と、 前記符号化工程が生成した符号化データに所定の演算を
    行い、演算結果を出力する演算工程と、 前記パラレルポートに接続されている装置が出力する受
    信可能状態信号が所定の大きさのデータを受信可能であ
    ることを示している場合に、前記演算工程により出力さ
    れた演算結果のデータを前記パラレルポートのデータ信
    号線に出力する通信工程とを有することを特徴とする通
    信制御方法。
  5. 【請求項5】 複数のデータ信号線および少なくとも一
    つの制御信号線および少なくとも一つの状態信号線を有
    するパラレルポートを介して外部に転送すべき元データ
    を解析して特定のデータバイトを含まないように符号化
    データを生成する符号化工程と、 前記符号化工程が生成した符号化データに所定の演算を
    行い、演算結果を出力する演算工程と、 前記パラレルポートに接続されている装置が出力する受
    信可能状態信号が所定の大きさのデータを受信可能であ
    ることを示している場合に、前記演算工程により出力さ
    れた演算結果のデータを前記パラレルポートのデータ信
    号線に出力する通信工程とを含むことを特徴とするコン
    ピュータが読み出し可能なプログラムを格納した記憶媒
    体。
  6. 【請求項6】 データ値の変化に応じて受信クロックを
    生成する受信側装置に対して所定幅のパラレルインター
    フェースを介してデータを送信する通信制御装置であっ
    て、 送信するパラレルデータを、特定の値を含まないように
    符号化する符号化手段と、 前記符号化手段により符号化されたパラレルデータを、
    隣接するデータが互いに異なる値となるように演算する
    演算手段と、 前記演算手段により演算されたデータを前記パラレルイ
    ンターフェースを介して送信する手段とを備えることを
    特徴とする通信制御装置。
  7. 【請求項7】 前記符号化手段は、前記特定の値及びそ
    れに続くデータ列を、そのデータ列の長さと該データ列
    が前記特定の値に続く旨とを表す符号と、それに続く前
    記データ列に符号化することを特徴とする請求項6に記
    載の通信制御装置。
  8. 【請求項8】 前記符号化手段はさらに、前記特定の値
    からなるデータ列を、前記特定の値からなるデータ列で
    ある旨とそのデータ列の長さとを表す符号に符号化し、
    連続する同一の値を含むデータ列を、連続する同一の値
    を含むデータ列である旨とデータ列の長さとを表す符号
    と、前記同一の値を表す符号とに符号化し、所望のデー
    タ列を、所望のデータ列である旨とその長さとを表す符
    号と、それに続くデータ列とに符号化することを特徴と
    する請求項6または7に記載の通信制御装置。
  9. 【請求項9】 前記演算手段は、符号化データと前記特
    定の値と直前の演算結果とに、逆演算の存在する演算を
    施すことを特徴とする請求項6に記載の通信制御装置。
  10. 【請求項10】 データ値の変化に応じて受信クロック
    を生成する受信側装置に対して所定幅のパラレルインタ
    ーフェースを介してデータを送信するための通信制御方
    法であって、 送信するパラレルデータを、特定の値を含まないように
    符号化する符号化工程と、 前記符号化工程により符号化されたパラレルデータを、
    隣接するデータが互いに異なる値となるように演算する
    演算工程と、 前記演算工程により演算されたデータを前記パラレルイ
    ンターフェースを介して送信する工程とを備えることを
    特徴とする通信制御方法。
  11. 【請求項11】 前記符号化工程は、前記特定の値及び
    それに続くデータ列を、そのデータ列の長さと該データ
    列が前記特定の値に続く旨とを表す符号と、それに続く
    前記データ列に符号化することを特徴とする請求項10
    に記載の通信制御方法。
  12. 【請求項12】 前記符号化工程はさらに、前記特定の
    値からなるデータ列を、前記特定の値からなるデータ列
    である旨とそのデータ列の長さとを表す符号に符号化
    し、連続する同一の値を含むデータ列を、連続する同一
    の値を含むデータ列である旨とデータ列の長さとを表す
    符号と、前記同一の値を表す符号とに符号化し、所望の
    データ列を、所望のデータ列である旨とその長さとを表
    す符号と、それに続くデータ列とに符号化することを特
    徴とする請求項10または11に記載の通信制御方法。
  13. 【請求項13】 前記演算工程は、符号化データと前記
    特定の値と直前の演算結果とに、逆演算の存在する演算
    を施すことを特徴とする請求項10に記載の通信制御方
    法。
  14. 【請求項14】 データ値の変化に応じて受信クロック
    を生成する受信側装置に対して所定幅のパラレルインタ
    ーフェースを介してデータを送信するためのプログラム
    を格納するコンピュータ可読の記憶媒体であって、前記
    プログラムは、 送信するパラレルデータを、特定の値を含まないように
    符号化する符号化工程と、 前記符号化工程により符号化されたパラレルデータを、
    隣接するデータが互いに異なる値となるように演算する
    演算工程と、 前記演算工程により演算されたデータを前記パラレルイ
    ンターフェースを介して送信する工程とを備えることを
    特徴とする記憶媒体。
  15. 【請求項15】 複数のデータ信号線および少なくとも
    一つの制御信号線および少なくとも一つの状態信号線を
    有するパラレルポートと、 前記パラレルポートの任意のデータ信号の変化を検出し
    てクロック信号を生成するクロック生成手段と、 前記クロック生成手段によりクロック信号が生成された
    ときに、前記パラレルポートを介して受信したデータ信
    号を一時記憶するレジスタと、 前記クロック生成手段によりクロック信号が生成される
    前に前記レジスタに一時記憶されていたデータと、前記
    クロック生成手段によりクロック信号が生成されたとき
    に前記レジスタに一時記憶されたデータとの演算を行い
    演算結果を出力する演算器と、 前記演算器が出力した演算結果を記憶する記憶手段と、 前記記憶手段に所定の空き領域があるか否かを示す受信
    可能状態信号を前記パラレルポートの状態信号線または
    データ信号線に出力する受信可能状態信号出力手段と、 受信したデータ信号に基づいて印刷を行う印刷手段とを
    有することを特徴とする印刷装置。
JP11033318A 1999-02-10 1999-02-10 通信制御装置および通信制御方法及び記憶媒体 Withdrawn JP2000231540A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP11033318A JP2000231540A (ja) 1999-02-10 1999-02-10 通信制御装置および通信制御方法及び記憶媒体
US09/501,523 US6791705B1 (en) 1999-02-10 2000-02-09 Communication control apparatus and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11033318A JP2000231540A (ja) 1999-02-10 1999-02-10 通信制御装置および通信制御方法及び記憶媒体

Publications (1)

Publication Number Publication Date
JP2000231540A true JP2000231540A (ja) 2000-08-22

Family

ID=12383222

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11033318A Withdrawn JP2000231540A (ja) 1999-02-10 1999-02-10 通信制御装置および通信制御方法及び記憶媒体

Country Status (2)

Country Link
US (1) US6791705B1 (ja)
JP (1) JP2000231540A (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4348087B2 (ja) * 2001-03-16 2009-10-21 イーエムシー コーポレイション ネットワークにおけるファイル共有の方法およびシステム
JP4956517B2 (ja) * 2008-10-02 2012-06-20 京セラドキュメントソリュ−ションズ株式会社 データ圧縮装置、画像読取装置
JP2013005260A (ja) * 2011-06-17 2013-01-07 Sony Corp 送出装置、受信装置、放送システム、送出方法、受信方法及びこれらのプログラム
US10437769B2 (en) 2013-12-26 2019-10-08 Intel Corporation Transition-minimized low speed data transfer

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5504929A (en) * 1993-11-17 1996-04-02 Adobe Systems Incorporated Method and apparatus for encoding byte sequence for self-clocked high speed data transfer from a parallel port
US6421754B1 (en) * 1994-12-22 2002-07-16 Texas Instruments Incorporated System management mode circuits, systems and methods
US5909572A (en) * 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US6411452B1 (en) * 1997-03-11 2002-06-25 Western Digital Technologies, Inc. Disk drive employing read error tolerant sync mark detection

Also Published As

Publication number Publication date
US6791705B1 (en) 2004-09-14

Similar Documents

Publication Publication Date Title
US4222102A (en) Data buffer memory of the "first-in, first-out" type, comprising a variable input and a variable output
KR970049636A (ko) 데이타 전송 시스템 및 그 방법
JPH06188850A (ja) データ転送方式及びデータ転送装置
US4007441A (en) Method of data communications in a heterogenous environment
US5079696A (en) Apparatus for read handshake in high-speed asynchronous bus interface
JP2000231540A (ja) 通信制御装置および通信制御方法及び記憶媒体
KR920003270B1 (ko) 캐쉬 메모리를 사용한 블록 액세스 장치
JPS5854695B2 (ja) 信号制御方式
JPS593526A (ja) 多重アドレスおよびデ−タバスを遠方の周辺装置に延長するための回路
GB1581839A (en) I/o bus transceiver for a data processing system
US10621122B1 (en) Systems and methods for transferring data with a dual-line first-in-first-out (FIFO) memory array
US4375078A (en) Data transfer control circuit
JP3571195B2 (ja) 画像形成装置のホストインタフェース回路
EP0299265A2 (en) Receiver synchronization in encoder/decoder
CA2021348C (en) Elastic store memory circuit
US6513087B1 (en) Bus transfer apparatus
JP3201352B2 (ja) 同期化回路
JP3260862B2 (ja) パラレルデータ伝送装置
JP3592169B2 (ja) 非同期データ転送制御装置および非同期データ転送制御方法
JPH1139256A (ja) 通信制御装置および通信制御方法およびコンピュータが読み出し可能なプログラムを格納した記憶媒体
RU2084950C1 (ru) Устройство для модификации адреса в цифровой сети
JPH08249273A (ja) 転送速度切り替え機能付き非同期転送回路
KR200170149Y1 (ko) 데이터 송수신 장치
JP3479847B2 (ja) 入力装置、出力装置、及び入出力装置
CN117992253A (zh) 一种固定延迟消息传输方法及相关产品

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20060509