(57)【特許請求の範囲】
【請求項１】
第１の入力データが順次入力される第１の入力端子と、
第２の入力データが順次入力される第２の入力端子と、
出力データが順次出力される出力端子と、
複数の第１の入力データの、１つもしくは複数の各配列に対応して定義された１つもしくは複数の置換データを記憶するメモリ手段と、
前記第１の入力端子から最新の第１の入力データが入力された際に、該最新の第１の入力データを含み該最新の第１の入力データから入力順に遡った複数の第１の入力データが、前記配列のいずれか１つに相当するか否かに応じて、前記第２の入力端子から入力された前記第２の入力データの少なくとも一部もしくは全部のビットが該配列に対応して定義された前記置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子から出力するデータ切換手段とを備えたことを特徴とするデータフロー制御装置。
【請求項２】
前記メモリ手段が、１つもしくは複数のメモリ領域を備え、該メモリ領域それぞれに前記置換データそれぞれを記憶するものであり、
前記データ手段が、
前記第１の入力端子から順次入力される複数の第１の入力データからなる検索データと一致するか否かの検索の対象とされる１つもしくは複数の被検索データが記憶され、該検索において前記検索データと前記被検索データいずれかとの一致が検出された場合に、前記メモリ手段の、一致が検出された被検索データに対応する前記置換データが記憶された前記メモリ領域から該置換データを読み出すためのアクセス信号を出力するデータ参照手段と、
前記アクセス信号の有無に応じて、前記第２の入力端子から入力された入力データの少なくとも一部もしくは全部のビットが前記メモリ手段から読み出された前記置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データからなる第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子から出力するデータ出力手段とを備えたものであることを特徴とする請求項１記載のデータフロー制御装置。
【請求項３】
前記データ切換手段が、前記第１の入力端子から最新の第１の入力データが入力された際に、該最新の第１の入力データを含み該最新の第１の入力データから入力順に遡った複数の第１の入力データが、前記配列を構成する前記第１の入力データどうしの間に前記配列を構成しない前記第１の入力データの嵌入を許容したときの前記配列のいずれか１つを含むか否かに応じて、前記第２の入力端子から入力された前記第２の入力データの少なくとも一部もしくは全部のビットが該配列に対応して定義された前記置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子から出力するものであることを特徴とする請求項１記載のデータフロー制御装置。
【請求項４】
前記メモリ手段が、１つもしくは複数のメモリ領域を備え、該メモリ領域それぞれに、必要に応じて、前記置換データ、前記配列の検索に用いられる帰環データおよび前記配列の最終段であるか否かを示す出力制御データを記憶するものであり、
前記データ切換手段が、
前記メモリ手段から読み出された帰還データを格納するレジスタと、
前記第１の入力端子から入力されれる第１の入力データと前記レジスタに格納された帰還データのペアからなる検索データと一致するか否かの検索の対象とされる１つもしくは複数の被検索データが記憶され、該検索において前記検索データと前記被検索データいずれかとの一致が検出された場合に、前記メモリ手段の、一致が検出された被検索データに対応する前記メモリ領域から該メモリ領域に記憶されたデータを読み出すためのアクセス信号を出力するデータ参照手段と、
前記メモリ手段から読みだされたデータ中の前記出力制御データに応じて、
前記第２の入力端子から入力された前記第２の入力データの少なくとも一部もしくは全部のビットが前記メモリ領域から読み出されたデータ中の前記置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子から出力するデータ出力手段とを備えたものであることを特徴とする請求項３記載のデータフロー制御装置。
【請求項５】
前記データ切換手段が、前記第１の入力端子から最新の第１の入力データが入力された際に、該最新の第１の入力データを含み該最新の第１の入力データから入力順に遡った複数の第１の入力データが、前記配列を構成する前記第１の入力データどうしの間に前記配列を構成しない各所定数以内の前記第１の入力データの嵌入を許容したときの前記配列のいずれか１つを含むか否かに応じて、前記第２の入力端子から入力された前記第２の入力データの少なくとも一部もしくは全部のビットが該配列に対応して定義された前記置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子から出力するものであることを特徴とする請求項１記載のデータフロー制御装置。
【請求項６】
前記メモリ手段が、１つもしくは複数のメモリ領域を備え、該メモリ領域それぞれに、必要に応じて、前記置換データ、前記配列の検索に用いられる帰還データ、前記所定数を表わす距離データ、および前記配列の最終段であるか否かを示す出力制御データを記憶するものであり、
前記データ切換手段が、
前記メモリ手段から読み出された前記帰還データを格納するレジスタと、
前記メモリ手段から読み出された前記距離データを格納し、該格納の後、前記配列を構成する前記第１の入力データが前記第１の入力端子から次に入力される前に、前記距離データにより定まる前記所定数を越える、前記配列を構成しない前記第１の入力データが前記第１の入力端子から入力された場合に検索中の前記配列の検索を終了させるカウンタと、
前記第１の入力端子から入力される第１の入力データと前記レジスタに格納された帰還データとのペアからなる検索データと一致するか否かの検索の対象とされる１つもしくは複数の被検索データが記憶され、該検索において前記検索データと前記被検索データいずれかとの一致が検出された場合に、前記メモリ手段の、一致が検出された被検索データに対応する前記メモリ領域から該メモリ領域に記憶されたデータを読み出すためのアクセス信号を出力するデータ参照手段と、
前記メモリ手段から読み出されたデータ中の前記出力制御データに応じて、前記第２の入力端子から入力された前記第２の入力データの少なくとも一部もしくは全部のビットが前記メモリ領域から読み出されたデータ中の前記置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子から出力するデータ出力手段とを備えたものであることを特徴とする請求項５記載のデータフロー制御装置。
【請求項７】
前記データ参照手段が、エンハンスメントトランジスタとディプレッショントランジスタとの組合せにより定義された前記被検索データを記憶するものであることを特徴とする請求項２、４又は６のうちいずれか１項記載のデータフロー制御装置。
【請求項８】
前記メモリ手段が、エンハンスメントトランジスタとディプレッショントランジスタとの組合せにより定義されたデータを記憶するものであることを特徴とする請求項２、４又は６のうちいずれか１項記載のデータフロー制御装置。
【請求項９】
前記第１の入力手段が、多数のデータを記憶する記憶装置に入力されるアドレスデータを前記第１の入力データとして入力するものであり、前記第２の入力手段が、前記記憶装置から出力されたデータを前記第２の入力データとして入力するものであることを特徴とする請求項１記載のデータフロー制御装置。
【請求項１０】
前記メモリ手段が、複数の前記第１の入力データからなる第１の配列に対応する前記置換データ、および前記第１の配列を構成する複数の第１の入力データとこれら複数の第１の入力データに引き続いて配列された１つもしくは複数の前記第１の入力データとからなる第２の配列に対応する前記置換データを記憶するものであることを特徴とする請求項１記載のデータフロー制御装置。
【請求項１１】
前記メモリ手段が、同一の前記第１の入力データを最終段に含む複数の前記配列それぞれに対応する複数の前記置換データを記憶するものであることを特徴とする請求項１記載のデータフロー制御装置。
【請求項１２】
前記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
前記配列が、分岐命令もしくは該分岐命令よりも前に実行される命令が格納されたアドレスと、該分岐命令よりも後に実行される命令が格納されたアドレスであって該分岐命令により該分岐命令が格納されたアドレスから離れたアドレスへ分岐した側の命令が格納されたアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなることを特徴とする請求項１記載のデータフロー制御装置。
【請求項１３】
前記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
前記配列が、サブルーチンコール命令もしくは該サブルーチンコール命令よりも前に実行される命令が格納されるアドレスと、該サブルーチンコール命令よりも後に実行される命令が格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなることを特徴とする請求項１記載のデータフロー制御装置。
【請求項１４】
前記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
前記配列が、サブルーチンからのリターン命令もしくは該リターン命令よりも前に実行される命令が格納されるアドレスと、該リターン命令よりも後に実行される命令が格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなることを特徴とする請求項１項記載のデータフロー制御装置。
【請求項１５】
前記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
前記配列が、所定の事象が生じたときに該事象に対応する所定のルーチンの呼出しを指示するコール命令が格納されるアドレスと、該コール命令よりも後に実行される命令が格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなることを特徴とする請求項１記載のデータフロー制御装置。
【請求項１６】
前記第１のデータがＣＰＵで実行される命令、およびＣＰＵからアクセスされるデータが格納されるメモリ上のアドレスを表わすアドレスデータであって、
前記配列が、メモリ上のデータをアクセスするデータアクセス命令もしくは該データアクセス命令よりも前に実行される命令が格納されるアドレスと、該データアクセス命令によりアクセスされるデータが格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなることを特徴とする請求項１記載のデータフロー制御装置。
【請求項１７】
第１の入力データが順次入力される第１の入力端子、
第２の入力データが順次入力される第２の入力端子、
出力データが順次出力される出力端子、
複数の第１の入力データの、１つもしくは複数の各配列に対応して定義された置換データと、前記配列のうちの少くとも１つの配列に含まれる前記第１の入力データに対応して定義された帰還データとを記憶するメモリ手段、
前記メモリ手段から読み出された前記帰還データを格納するレジスタ、
前記第２の入力端子から入力された前記第２の入力データと、前記メモリ手段から読み出された前記置換データとを入力し、所定の制御信号に応じて、前記第２の入力データ、もしくは該第２の入力データの少くとも一部もしくは全部のビットが前記置換データに置換されたデータを、前記出力信号として前記出力端子に出力するセレクタ、
前記配列のうちのいずれか１つの配列に含まれる前記第１のデータと、該第１のデータを含む前記配列を構成する、該第１のデータの直前に配列された第１のデータに対応して定義された前記帰還データとの対からなる被検索データを、前記配列のうちのいずれか１つの配列に含まれる前記第１のデータそれぞれに対応して各被検索データメモリ領域に記憶し、前記第１の入力端子から入力された前記第１のデータと前記レジスタに格納された、前記メモリ手段から読み出された前記帰還データとの対からなる検索データと、前記被検索データそれぞれとを比較し、該検索データと一致する前記被検索データが格納された前記被検索データメモリ領域に対応して備えられた信号線に一致信号を出力する一致検出手段、および
前記信号線に前記一致信号が出力されたことを受けて、前記一致信号が出力された前記信号線に対応する前記被検索データメモリ領域に格納された前記被検索データを構成する前記第１のデータに対応して定義された前記帰還データを前記メモリ手段から読み出して前記レジスタに格納するとともに、該検索データを構成する前記第１の入力データが前記配列のうちのいずれか１つの配列の最終に配列された前記第１の入力データであるか否かに応じて、該配列に対応して定義された前記置換データを前記メモリ手段から読み出して前記第２の入力手段から入力された前記第２のデータの少なくとも一部もしくは全部のビットが該置換データで置換されたデータを前記セレクタから出力させ、もしくは前記第２の入力手段から入力された前記第２のデータを前記セレクタから出力させる制御手段を備えたことを特徴とするデータフロー制御装置。
【請求項１８】
第１の入力データが順次入力される第１の入力端子、
第２の入力データが順次入力される第２の入力端子、
出力データが順次出力される出力端子、
複数の第１の入力データの、１つもしくは複数の各配列に対応して定義された置換データと、前記配列のうちのいずれか１つの配列に含まれる前記第１の入力データに対応して定義された帰還データと、該第１の入力データに対応して定義された、該第１のデータが前記第１の入力端子から入力された後、該第１のデータを含む前記配列を構成する該第１のデータの直後に配列された第１のデータが前記第１の入力端子から入力されるまでの間に、該第１の入力端子から入力されることが許容される他の第１の入力データの個数を指標する距離データとを記憶するメモリ手段、
前記メモリ手段から読み出された前記帰還データを格納するレジスタ、
前記メモリ手段から読み出された前記距離データを格納し、該格納の後に前記第１の入力端子から入力される前記第１の入力データの個数と該距離データとを比較することにより、前記第１の入力端子から、前記配列中に隣接する２つの所定の第１の入力データそれぞれが入力される間に入力される他の第１の入力データの個数が該距離データにより定まる個数を越えた場合に前記配列の検索を終了させるカウンタ、
前記第２の入力端子から入力された前記第２の入力データと、前記メモリ手段から読み出された前記置換データとを入力し、所定の制御信号に応じて、前記第２の入力データ、もしくは該第２の入力データの少なくとも一部もしくは全部のビットが前記置換データに置換されたデータを、前記出力信号として前記出力端子に出力するセレクタ、
前記配列のうちのいずれか１つの配列に含まれる前記第１のデータと、該第１のデータを含む前記配列を構成する、該第１のデータの直前に配列された第１のデータに対応して定義された前記帰還データとの対からなる被検索データを、前記配列のうちのいずれか１つの配列に含まれる前記第１のデータそれぞれに対応して各被検索データメモリ領域に記憶し、前記第１の入力端子から入力された前記第１のデータと前記レジスタに格納された、前記メモリ手段から読み出された前記帰還データの対からなる検索データと、前記被検索データのそれぞれとを比較し、検索データと一致する前記被検索データが格納された前記被検索データメモリ領域に対応して備えられた信号線に一致信号を出力する一致検出手段、および
前記信号線に前記一致信号が出力されたことを受けて、前記一致信号が出力された前記信号線に対応する前記被検索データメモリ領域に格納された前記被検索データを構成する前記第１のデータに対応して定義された前記帰還データおよび前記距離データを前記メモリ手段から読み出して、それぞれ、前記レジスタおよび前記カウンタに格納するとともに、該検索データを構成する前記第１の入力データが前記配列のうちのいずれか１つの配列の最終に配列された前記第１の入力データであるか否かに応じて、該配列に対応して定義された前記置換データを前記メモリ手段から読み出して前記第２の入力手段から入力された前記第２のデータの少なくとも一部もしくは全部のビットが該置換データで置換されたデータを前記セレクタから出力させ、もしくは前記第２の入力手段から入力された前記第２のデータを前記セレクタから出力させる制御手段を備えたことを特徴とするデータフロー制御装置。
【請求項１９】
入力データが順次入力される入力端子と、
出力データが順次出力される出力端子と、
複数の各入力データに対応してそれぞれ定義された複数の記憶データを記憶する第１のメモリ手段と、
複数の入力データの、１つもしくは複数の各配列に対応して定義された１つもしくは複数の置換データを記憶する第２のメモリ手段と、
前記入力端子から最新の入力データが入力された際に、該最近の入力データを含み該最新の入力データから入力順に遡った複数の第１の入力データが、前記各配列のいずれか１つに相当するか否かに応じて、前記最新の入力データに対応して定義された前記記憶データの少なくとも一部もしくは全部のビットが該配列に対応して定義された前記置換データに置換されてなる第１の出力データ、前記最新の入力データに対応して定義された前記記憶データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子に出力する読出制御手段とを備えたことを特徴とするメモリ装置。
【請求項２０】
前記読出制御手段が、
前記入力端子から最新の入力データが入力された際に、該最近の入力データを含み該最新の入力データから入力順に遡った複数の第１の入力データが、前記配列を構成する前記入力データどうしの間に前記配列を構成しない前記入力データの嵌入を許容したときの前記配列のいずれか１つを含むか否かに応じて、前記最新の入力データに対応して定義された前記記憶データの少なくとも一部もしくは全部のビットが該配列に対応して定義された前記置換データに置換されてなる第１の出力データ、前記最新の入力データに対応して定義された前記記憶データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子に出力するものであることを特徴とする請求項１９記載のメモリ装置。
【請求項２１】
前記読出制御手段が、
前記入力端子から最新の入力データが入力された際に、該最近の入力データを含み該最新の入力データから入力順に遡った複数の第１の入力データが、前記配列を構成する前記入力データどうしの間に前記配列を構成しない各所定数以内の前記入力データの嵌入を許容したときの前記配列のいずれか１つを含むか否かに応じて、前記最新の入力データに対応して定義された前記記憶データの少なくとも一部もしくは全部のビットが該配列に対応して定義された前記置換データに置換されてなる第１の出力データ、前記最新の入力データに対応して定義された前記記憶データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および前記第１の出力データと前記第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、前記出力データとして前記出力端子に出力するものであることを特徴とする請求項１９記載のメモリ装置。
【請求項２２】
前記入力データが、アドレスデータであることを特徴とする請求項１９記載のメモリ装置。
【請求項２３】
前記出力端子から出力される出力データがＣＰＵで実行される命令を表すデータを含み、前記出力端子から出力される前記互いに異なるデータが、互いに同一の命令コードであって、かつ互いに異なるオペランドの命令を表わすデータであることを特徴とする請求項１９記載のメモリ装置。
【請求項２４】
前記互いに異なるデータが、互いに同一のレジスタに互い異なる値を格納する命令を表わすデータであることを特徴とする請求項２３記載のメモリ装置。
【請求項２５】
前記互いに異なるデータが、互いに異なるメモリアドレスに所定値を格納する命令であることを特徴とする請求項２３記載のメモリ装置。
【請求項２６】
前記互いに異なるデータが、互いに異なるアドレスへの分岐命令であることを特徴とする請求項２３記載のメモリ装置。
【請求項２７】
前記出力端子から出力される出力データがＣＰＵで実行される命令を表すデータを含み、前記出力端子から出力される前記互いに異なるデータのうちの少なくとも１つが、サブルーチンからのリターン命令を表わすデータであることを特徴とする請求項１９記載のメモリ装置。
【請求項２８】
前記出力端子から出力される出力データがＣＰＵで実行される所定の命令を表わすデータを含み、前記出力端子から出力される前記互いに異なるデータが、互いに異なる命令を表わすデータであることを特徴とする請求項１９記載のメモリ装置。
【請求項２９】
前記出力端子から出力される出力データがＣＰＵで実行される所定の命令で参照されるデータを含み、前記出力端子から出力される前記互いに異なるデータが、前記所定の命令で参照される、互いに値の異なるデータであることを特徴とする請求項１９記載のメモリ装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、データを切換えて出力するデータフロー制御装置およびそのデータフロー制御装置を内包したメモリ装置に関し、詳細には、ＣＰＵとソフトウェアにより処理される制御システムあるいはゲーム機等に於て、ソフトウェアの違法コピ−を防ぐ防御手段として使用されるデータフロー制御装置およびその制御手段を内蔵したメモリ装置に関する。
【０００２】
【従来の技術】
従来の制御システムは、例えば図３３に示すように、データバス１にＣＲＴ２、ＣＰＵ（中央処理装置）３、ＲＯＭ４、ターミナル５およびＳＲＡＭ６等が接続された構成を有している。
ここで、一般的にソフトウェアはＲＯＭ４に格納され、ターミナル５からのソフトウェア起動の指示により、選択処理されることになり、その結果がＣＲＴ２に表示される。また処理途中で一次的なデータ格納の必要な場合にＳＲＡＭ６等が利用される。あるいは、ＲＯＭ４からのソフトウェアの一部をＳＲＡＭ６にダウンロードしてからＣＰＵ３で処理することもある。
【０００３】
また、このＲＯＭ４の中に収められたソフトウェアは、図３４に示すように、各々のデータＤはその格納番地を示す特定のアドレスＡに１つ１つ格納されており、ＣＰＵ３から与えられるアドレスＡにより出力されるデータＤを用いてＣＰＵ３でソフトウェアが実行される。
このような制御システムあるいはこのような制御システムを用いたゲームシステムに於て、多くのソフトウェア開発のベンダーを利用すべく、図３３のＲＯＭ部分がカセット式に着脱可能に構成され、このカセット９を入れ換えることでそのカセット９に備えられたＲＯＭ４の記憶内容に応じた制御が行われ、あるいはその記憶内容に応じたゲームが楽しめるようになっている。
【０００４】
【発明が解決しようとする課題】
このようにソフトウェアを収めるＲＯＭ４の部分がカセット式となっていると、そのＲＯＭ４の内容は、アドレス線７からアドレスＡを与えるだけでデータＤをデータ線８に出力してしまう。
このような単純な構造となっているが故に、全てのアドレスＡを順次１つずつ与えて全てのデータＤを読み出すことで、違法コピーがいとも簡単に可能となってしまう。このため、長い時間かけ多くの人材と資金を投入して開発されたソフトウェアの正当な権利者の利益を損うというゆゆしき問題が生じている。
【０００５】
そこで、本発明は、このような違法コピーを不可能とするデータフロー制御装置およびそれを内包するメモリ装置を提供することを目的とする。
【０００６】
【課題を解決するための手段】
本発明のデータフロー制御装置は、
（１ １）第１の入力データが順次入力される第１の入力端子
（１ ２）第２の入力データが順次入力される第２の入力端子
（１ ３）出力データが順次出力される出力端子
（１ ４）複数の第１の入力データの、１つもしくは複数の各配列に対応して定義された１つもしくは複数の置換データを記憶するメモリ手段
（１ ５）第１の入力端子から最新の第１の入力データが入力された際に、その最新の第１の入力データを含みその最新の第１の入力データから入力順に遡った複数の第１の入力データが、上記配列のいずれか１つに相当するか否かに応じて、第２の入力端子から入力された第２の入力データの少なくとも一部もしくは全部のビットがその配列に対応して定義された置換データに置換されてなる第１の出力データ、第２の入力端子から入力された第２の入力データと同一論理の第２の出力データ、第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子から出力するデータ切換手段
を備えたことを特徴とするものである。
【０００７】
ここで、上記（１ ４）のメモリ手段が、
（２ １）１つもしくは複数のメモリ領域を備え、該メモリ領域それぞれに上記置換データそれぞれを記憶するものであり、
上記（１ ５）のデータ切換手段が、
（３ １）第１の入力端子から順次入力される複数の第１の入力データからなる検索データと一致するか否かの検索の対象とされる１つもしくは複数の被検索データが記憶され、その検索において検索データと被検索データいずれかとの一致が検出された場合に、上記メモリ手段の、一致が検出された被検索データに対応する置換データが記憶されたメモリ領域からその置換データを読み出すためのアクセス信号を出力するデータ参照手段
（３ ２）上記アクセス信号の出力の有無に応じて、第２の入力端子から入力された第２の入力データの少なくとも一部もしくは全部のビットが上記メモリ手段から読み出された置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データからなる第２の出力データ、第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子から出力するデータ出力手段
を備えたものであってもよい。
【０００８】
上記（２ １）のメモリ手段は、上記（２ １）で定義される以上に限定された特定の構成のものである必要はないが、例えば、上記（２ １）のメモリ手段は、エンハンスメントトランジスタとディプレッショントランジルタとの組合わせにより定義された置換データを記憶するものであることが好ましい。
また上記（３ １）のデータ参照手段も、上記（３ １）で定義されるよりも狭く限定される必要はないが、上記（３ １）のデータ参照手段は、エンハンスメントトランジスタとディプレッショントランジスタとの組合せにより定義された被検索データを記憶するものであることが好ましい。
【０００９】
また、本発明のデータフロー制御装置において、上記（１ ５）のデータ切換手段は、
（４ １）第１の入力端子から最新の第１の入力データが入力された際に、その最新の第１の入力データを含みその最新の第１の入力データから入力順に遡った複数の第１の入力データが、上記配列を構成する第１の入力データどうしの間に上記配列を構成しない第１の入力データの嵌入を許容したときの上記配列のいずれか１つを含むか否かに応じて、第２の入力端子から入力された第２の入力データの少なくとも一部もしくは全部のビットがその配列に対応して定義された置換データに置換されてなる第１の出力データ、第２の入力端子から入力された第２の入力データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子から出力するものであってもよい。
【００１０】
ここで、上記（１ ４）のメモリ手段が、
（５ １）１つもしくは複数のメモリ領域を備え、それらのメモリ領域それぞれに、必要に応じて、上記置換データ、上記配列の検索に用いられる帰還データおよび上記配列の最終段であるか否かを示す出力制御データを記憶するものであり、
上記（４ １）のデータ切換手段が、
（６ １）上記（５ １）のメモリ手段から読み出された帰還データを格納するレジスタ
（６ ２）第１の入力端子から入力されれる第１の入力データと上記レジスタに格納された帰還データとのペアからなる検索データと一致するか否かの検索の対象とされる１つもしくは複数の被検索データが記憶され、その検索において検索データと被検索データのいずれかとの一致が検出された場合に、上記（５ １）のメモリ手段の、一致が検出された被検索データに対応するメモリ領域からそのメモリ小域に記憶されたデータを読み出すためのアクセス信号を出力するデータ参照手段
（６ ３）上記（５ １）のメモリ手段から読み出されたデータ中の出力制御データに応じて、第２の入力端子から入力された第２の入力データの少なくとも一部もしくは全部のビットがメモリ領域から読み出されたデータ中の置換データに置換されてなる第１の出力データ、第２の入力端子から入力された第２の入力データと同一論理の第２の出力データ、前記第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子から出力するデータ出力手段
を備えたものであってもよい。
【００１１】
上記（５ １）のメモリ手段は、上記（２ １）のメモリ手段の場合と同様、上記（５ １）で定義される以上に限定された構成のものである必要はないが、例えば上記（５ １）のメモリ手段は、エンハンスメントトランジスタとディプレッショントランジスタとの組合せにより定義されたデータを記憶するのものであることが好ましい。
【００１２】
また、上記（６ ２）のデータ参照手段についても同様であり、上記（６ ２）のデータ参照手段は、エンハンスメントトランジスタとディプレッショントランジスタとの組合せにより定義された被検索データを記憶するものであることが好ましい。
さらに、本発明のデータフロー制御装置において、上記（１ ５）の前記データ切換手段は、
（７ １）第１の入力端子から最新の第１の入力データが入力された際に、その最新の第１の入力データを含みその最新の第１の入力データから入力順に遡った複数の第１の入力データが、上記配列を構成する第１の入力データどうしの間に上記配列を構成しない各所定数以内の第１の入力データの嵌入を許容したときの上記配列のいずれか１つを含むか否かに応じて、第２の入力端子から入力された第２の入力データの少なくとも一部もしくは全部のビットがその配列に対応して定義された置換データに置換されてなる第１の出力データ、前記第２の入力端子から入力された前記第２の入力データと同一論理の第２の出力データ、第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子から出力するものであってもよい。
【００１３】
ここで、上記（１ ４）のメモリ手段が、
（８ １）１つもしくは複数のメモリ領域を備え、それらのメモリ領域それぞれに、必要に応じて、上記置換データ、上記配列の検索に用いられる帰還データ、上記所定数を表わす距離データ、および上記配列の最終段であるか否かを示す出力制御データを記憶するものであり、
上記（７ １）のデータ切換手段が、
（９ １）上記（８ １）のメモリ手段から読み出された帰還データを格納するレジスタ
（９ ２）上記（８ １）のメモリ手段から読み出された距離データを格納し、
その格納の後、上記配列を構成する第１の入力データが第１の入力端子から次に入力される前に、上記距離データにより定まる上記所定数を越える、上記配列を構成しない第１の入力データが第１の入力端子から入力された場合に検索中の上記配列の検索を終了させるカウンタ
（９ ３）第１の入力端子から入力される第１の入力データと上記レジスタに格納された帰還データとのペアからなる検索データと一致するか否かの検索の対象とされる１つもしくは複数の被検索データが記憶され、その検索において検索データと被検索データいずれかとの一致が検出された場合に、上記（８ １）メモリ手段の、一致が検出された被検索データに対応するメモリ領域からそのメモリ領域に記憶されたデータを読み出すためのアクセス信号を出力するデータ参照手段
（９ ４）上記（８ １）のメモリ手段から読み出されたデータ中の出力制御データに応じて、第２の入力端子から入力された第２の入力データの少なくとも一部もしくは全部のビットがメモリ領域から読み出されたデータ中の置換データに置換されてなる第１の出力データ、第２の入力端子から入力された第２の入力データと同一論理の第２の出力データ、第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子から出力するデータ出力手段
を備えたものであってもよい。
【００１４】
上記（８ １）のメモリ手段は、上記（２ １），（５ １）の各メモリ手段と同様、上記（８ １）で定義された以上に限定される必要はないが、例えば上記（８ １）のメモリ手段は、エンハンスメントトランジスタとディプレッショントランジスタとの組合せにより定義されたデータを記憶するものであることが好ましい。
【００１５】
また、上記（９ ３）のデータ参照手段についても同様であり、上記（９ ３）のデータ参照手段は、エンハンスメントトランジスタとディプレッショントランジスタとの組合せにより定義された前記被検索データを記憶するものであることが好ましい。
また、本発明のデータフロー制御装置においては、典型的には、上記第１の入力端子からは、多数のデータを記憶する記憶装置（例えばＲＯＭ等）に入力されるアドレスデータが上記第１の入力データとして入力され、上記第２の入力端子からは、上記記憶装置（ＲＯＭ等）から出力されたデータが上記第２の入力データとして入力される。
さらに、本発明のデータフロー制御装置における上記メモリ手段は、複数の第１の入力データからなる第１の配列に対応する置換データ、およびその第１の配列を構成する複数の第１の入力データとこれら複数の第１の入力データに引き続いて配列された１つもしくは複数の第１の入力データとからなる第２の配列に対応する置換データとを記憶するものであることが好ましく、また上記メモリ手段が、同一の第１の入力データを最終段に含む複数の配列それぞれに対応する複数の置換データを記憶するものであることも好ましい態様の１つである。
【００１６】
本発明のデータフロー制御装置は、例えば以下に示すような場面におけるアドレスデータの配列を採用することで有効に使用される。
（ａ）上記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
上記配列として、分岐命令もしくはその分岐命令よりも前に実行される命令が格納されたアドレスと、その分岐命令よりも後に実行される命令が格納されたアドレスであってその分岐命令によりその分岐命令が格納されたアドレスから離れたアドレスへ分岐した側の命令が格納されたアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなる配列を採用する。
【００１７】
（ｂ）上記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
上記配列として、サブルーチンコール命令もしくは該サブルーチンコール命令よりも前に実行される命令が格納されるアドレスと、該サブルーチンコール命令よりも後に実行される命令が格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなる配列を採用する。
【００１８】
（ｃ）上記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
上記配列として、サブルーチンからのリターン命令もしくは該リターン命令よりも前に実行される命令が格納されるアドレスと、該リターン命令よりも後に実行される命令が格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなる配列を採用する。
【００１９】
（ｄ）上記第１のデータがＣＰＵで実行される命令が格納されるメモリ上のアドレスを表わすアドレスデータであって、
上記配列として、所定の事象が生じたときに該事象に対応する所定のルーチンの呼出しを指示するコール命令が格納されるアドレスと、該コール命令よりも後に実行される命令が格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなる配列を採用する。
【００２０】
（ｅ）上記第１のデータがＣＰＵで実行される命令、およびＣＰＵからアクセスされるデータが格納されるメモリ上のアドレスを表わすアドレスデータであって、
上記配列として、メモリ上のデータをアクセスするデータアクセス命令もしくは該データアクセス命令よりも前に実行される命令が格納されるアドレスと、該データアクセス命令によりアクセスされるデータが格納されるアドレスとを含む複数のアドレスを表わす複数のアドレスデータからなる配列を採用する。
【００２１】
また、上記本発明のデータフロー制御装置は、その一実施態様として、例えば以下のように構成することができる。即ち、その一実施態様としての本発明のデーターフロー制御装置は、
（１０＿１）第１の入力データが順次入力される第１の入力端子
（１０＿２）第２の入力データが順次入力される第２の入力端子
（１０＿３）出力データが順次出力される出力端子
（１０＿４）複数の第１の入力データの、１つもしくは複数の各配列に対応して定義された置換データと、上記配列のうちの少くとも１つの配列に含まれる第１の入力データに対応して定義された帰還データとを記憶するメモリ手段
（１０＿５）上記メモリ手段から読み出された帰還データを格納するレジスタ
（１０＿６）上記第２の入力端子から入力された第２の入力データと、上記メモリ手段から読み出された置換データとを入力し、所定の制御信号に応じて、上記第２の入力データ、もしくはその第２の入力データの少くとも一部もしくは全部のビットが置換データに置換されたデータを、上記出力信号として上記出力端子に出力するセレクタ
（１０＿７）上記配列のうちのいずれか１つの配列に含まれる第１のデータと、その第１のデータを含む上記配列を構成する、その第１のデータの直前に配列された第１のデータに対応して定義された帰還データとの対からなる被検索データを、上記配列のうちのいずれか１つの配列に含まれる第１のデータそれぞれに対応して各被検索データメモリ領域に記憶し、上記第１の入力端子から入力された第１のデータと上記レジスタに格納された、上記メモリ手段から読み出された帰還データとの対からなる検索データと、上記被検索データそれぞれとを比較し、その検索データと一致する被検索データが格納された上記被検索データメモリ領域に対応して備えられた信号線に一致信号を出力する一致検出手段
（１０＿８）上記信号線に一致信号が出力されたことを受けて、一致信号が出力された信号線に対応する上記被検索データメモリ領域に格納された被検索データを構成する第１のデータに対応して定義された帰還データを上記メモリ手段から読み出して上記レジスタに格納するとともに、その検索データを構成する第１の入力データが上記配列のうちのいずれか１つの配列の最終に配列された第１の入力データであるか否かに応じて、その配列に対応して定義された置換データを上記メモリ手段から読み出して上記第２の入力手段から入力された第２のデータの少なくとも一部もしくは全部のビットがその置換データで置換されたデータを上記セレクタから出力させ、もしくは上記第２の入力手段から入力された第２のデータをセレクタから出力させる制御手段
を備えたことを特徴とするデータフロー制御装置である。
【００２２】
さらに、上記本発明のデータフロー制御装置は、もう１つの実施態様として、例えば以下のように構成することができる。即ち、その実施態様としての本発明のデーターフロー制御装置は、
（１１＿１）第１の入力データが順次入力される第１の入力端子
（１１＿２）第２の入力データが順次入力される第２の入力端子
（１１＿３）出力データが順次出力される出力端子
（１１＿４）複数の第１の入力データの、１つもしくは複数の各配列に対応して定義された置換データと、上記配列のうちのいずれか１つの配列に含まれる第１の入力データに対応して定義された帰還データと、その第１の入力データに対応して定義された、その第１のデータが上記第１の入力端子から入力された後、その第１のデータを含む配列を構成するその第１のデータの直後に配列された第１のデータが上記第１の入力端子から入力されるまでの間に、第１の入力端子から入力されることが許容される他の第１の入力データの個数を指標する距離データとを記憶するメモリ手段
（１１＿５）上記メモリ手段から読み出された帰還データを格納するレジスタ
（１１＿６）上記メモり手段から読み出された前記距離データを格納し、その格納の後に上記第１の入力端子から入力される第１の入力データの個数とその距離データとを比較することにより、上記第１の入力端子から、上記配列中に隣接する２つの所定の第１の入力データそれぞれが入力される間に入力される他の第１の入力データの個数が距離データにより定まる個数を越えた場合に上記配列の検索を終了させるカウンタ
（１１ ７）上記第２の入力端子から入力された第２の入力データと、上記メモリ手段から読み出された置換データとを入力し、所定の制御信号に応じて、上記第２の入力データ、もしくはその第２の入力データの少なくとも一部もしくは全部のビットが置換データに置換されたデータを、上記出力信号として上記出力端子に出力するセレクタ
（１１ ８）上記配列のうちのいずれか１つの配列に含まれる第１のデータと、その第１のデータを含む配列を構成する、その第１のデータの直前に配列された第１のデータに対応して定義された帰還データとの対からなる被検索データを、上記配列のうちのいずれか１つの配列に含まれる第１のデータそれぞれに対応して各被検索データメモり領域に記憶し、上記第１の入力端子から入力された第１のデータと上記レジスタに格納された、上記メモリ手段から読み出された帰還データの対からなる検索データと、上記被検索データそれぞれとを比較し、その検索データと一致する被検索データが格納された上記被検索データメモリ領域に対応して備えられた信号線に一致信号を出力する一致検出手段
（１１ ９）上記信号線に一致信号が出力されたことを受けて、一致信号が出力された信号線に対応する上記被検索データメモリ領域に格納された被検索データを構成する第１のデータに対応して定義された帰還データおよび距離データを上記メモリ手段から読み出して、それぞれ、上記レジスタおよび上記カウンタに格納するとともに、その帰還データを構成する第１の入力データ上記配列のうちのいずれか１つの配列の最終に配列された第１の入力データであるか否かに応じて、その配列に対応して定義された置換データを上記メモリ手段から読み出して上記第２の入力手段から入力された第２のデータの少なくとも一部もしくは全部のビットがその置換データで置換されたデータを上記セレクタから出力させ、もしくは上記第２の入力手段から入力された第２のデータを上記セレクタから出力させる制御手段
を備えたことを特徴とするデータフロー制御装置である。
【００２３】
また、本発明のメモリ装置は、
（１２ １）入力データが順次入力される入力端子
（１２ ２）出力データが順次出力される出力端子
（１２ ３）複数の各入力データに対応してそれぞれ定義された複数の記憶データを記憶する第１のメモリ手段
（１２ ４）複数の入力データの、１つもしくは複数の各配列に対応して定義された１つもしくは複数の置換データを記憶する第２のメモリ手段
（１２ ５）前記入力端子から最新の入力データが入力された際に、その最近の入力データを含みその最新の入力データから入力順に遡った複数の第１の入力データが、上記各配列のいずれか１つに相当するか否かに応じて、上記最新の入力データに対応して定義された記憶データの少なくとも一部もしくは全部のビットがその配列に対応して定義された置換データに置換されてなる第１の出力データ、上記最新の入力データに対応して定義された上記記憶データと同一論理の第２の出力データ、第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子に出力する読み出制御手段
を備えたことを特徴とするメモリ装置である。
【００２４】
ここで、上記本発明のメモリ装置において、上記（１２ ５）の読み出制御手段は、
（１３ １）上記入力端子から最新の入力データが入力された際に、その最近の入力データを含みその最新の入力データから入力順に遡った複数の第１の入力データが、上記配列を構成する入力データどうしの間に上記配列を構成しない入力データの嵌入を許容したときの上記配列のいずれか１つを含むか否かに応じて、上記最新の入力データに対応して定義された記憶データの少なくとも一部もしくは全部のビットがその配列に対応して定義された置換データに置換されてなる第１の出力データ、上記最新の入力データに対応して定義された記憶データと同一論理の第２の出力データ、第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子に出力するものであってもよい。
【００２５】
さらに、上記本発明のメモリ装置において、上記（１２ ５）の読み出制御手段は、
（１４ １）上記入力端子から最新の入力データが入力された際に、その最近の入力データを含みその最新の入力データから入力順に遡った複数の第１の入力データが、上記配列を構成する入力データどうしの間に上記配列を構成しない各所定数以内の入力データの嵌入を許容したときの上記配列のいずれか１つを含むか否かに応じて、上記最新の入力データに対応して定義された記憶データの少なくとも一部もしくは全部のビットがその配列に対応して定義された置換データに置換されてなる第１の出力データ、上記最新の入力データに対応して定義された記憶データと同一論理の第２の出力データ、第１の出力データに基づく論理演算により生成される第３の出力データ、および第１の出力データと第２の出力データとの双方に基づく論理演算により生成される第４の出力データからなるデータ群の中から選択される互いに異なるデータを、上記出力データとして出力端子に出力するものであってもよい。
【００２６】
上記本発明のメモリ装置には、上記入力データとして、典型的にはアドレスデータが入力される。
本発明のメモリ装置では、上記出力端子から出力される上記「互いに異なるデータ」が、以下に例示するようなデータであることが好ましい。
（ａ）上記出力端子から出力される出力データがＣＰＵで実行される命令を表わすデータを含み、上記出力端子から出力される上記互いに異なるデータが、互いに同一の命令コードであって、かつ互いに異なるオペランドの命令を表わすデータであること。例えば、
（ａ １）上記互いに異なるデータが、互いに同一のレジスタに互いに異なる値を格納する命令を表わすデータである。
（ａ ２）上記互いに異なるデータが、互いに異なるメモリアドレスに所定値を格納する命令であること。
（ａ ３）上記互いに異なるデータが、互いに異なるアドレスへの分岐命令であること。
（ｂ）上記出力端子から出力される出力データがＣＰＵで実行される命令を表わすデータを含み、上記出力端子から出力される上記互いに異なるデータのうちの少なくとも１つが、サブルーチンからのリターン命令を表わすデータであること。
（ｃ）上記出力端子から出力される出力データがＣＰＵで実行される命令を表すデータを含み、上記出力端子から出力される上記互いに異なるデータが、互いに異なる命令を表すデータであること。
（ｄ）上記出力端子から出力される出力データがＣＰＵで実行される所定の命令で参照されるデータを含み、上記出力端子から出力される上記互いに異なるデータが、上記所定の命令で参照される互いに値の異なるデータであること。
【００２７】
【作用】
プログラムにはジャンプ命令やサブルーチンへの分岐命令等、隣接したアドレス以外のアドレスに格納された命令（データ）をＲＯＭ等から読み出してくる場面が必ず存在する。しかもどのような場面でどこのアドレスに分岐するかは、そのプログラムの開発者のみが知るところである。
【００２８】
本発明は、この点に着目して完成されたものである。
即ち、上記「第１の入力データ」ないし上記「入力データ」をアドレスデータとしたとき、分岐命令等離れたアドレスどうしの組合せに対応して正規の命令であるところの置換データを定義しておくと、そのプログラムで定義された順序に複数のアドレスデータが入力されたときに、例えば置換データが出力され、ＣＰＵではその置換データを正規の命令として実行することができる。
【００２９】
一方、例えばジャンプ命令等を無視して例えば順次インクリメントするアドレスデータを与えてＲＯＭの内容を読み出そうとすると、置換データに置換されない、別のデータないし誤ったデータが読み出されてしまう結果となる。
したがってソフトウェアのデータ処理フローに沿わない単純なアドレスデータの入力による出力データの不正コピーを防止することができる。
【００３０】
近年、処理の高速化のために、いわゆるプリフェッチ動作を行うＣＰＵが登場してきている。このプリフェッチ動作とは、ＣＰＵにおけるデータ（命令）の実行終了を待つことなく機械的に次のアドレスのデータを先読みするものである、実行中の命令がたまたま、例えば分岐命令であったときは先読みしたデータを捨てて再度分岐先のアドレスのデータが読み込まれることになる。
【００３１】
本発明においては、ある配列を構成する第１の入力データ（ないし入力データ）どうしの間にその配列を構成しない第１の入力データ（入力データ）が入り込んでいてもその配列の存在を認識することができるため、プリフェッチ動作のようなプログラムの処理手順を無視した動作の場合にも誤動作することなく、配列の抽出と正規のデータの出力が可能となる。
【００３２】
また、本発明の、上記（６＿１）〜（６＿３）のデータ切換手段を備えたデータフロー制御装置、上記（９＿１）〜（９＿４）のデータ切換手段を備えたデータフロー制御装置、上記（１０＿１）〜（１０＿８）を備えたデータフロー制御装置、もしくは上記（１１＿１）〜（１１＿９）を備えたデータフロー制御装置、ないしそれらのデータフロー制御装置のいずれかを内蔵したメモリ装置においては、メモリ手段から帰還データを読み出してその帰還データを次の検索のために用いるように構成したため、本発明にいう「配列」として、少ない個数の第１の入力データからなる配列からかなり多数の第１の入力データからなる配列までかなり自由に定義することができ、極めて自由度の高いシステムが構成される。
【００３３】
また、本発明のデータフロー制御装置にいうメモリ手段、データ参照手段としてエンハンスメントトランジスタとディプレッショントランジスタの組合せでデータを定義した場合は、本発明のデータフロー制御装置ないしメモリ装置を搭載したＬＳＩを分解して顕微鏡等で観察しても、エンハンスメントトランジスタもディプレッショントランジスタも外観上は区別できず、したがってそこに定義されたデータの解析は一層困難となり、不正コピー防止の一層の確実化が図られる。
【００３４】
さらに、本発明にいう「配列」として、各第１の入力データをａ，ｂ，ｃ，ｄ，……としたとき、例えば配列‘ａ，ｂ，ｃ’と配列‘ａ，ｂ，ｃ，ｄ’のように、部分的に重なった複数の配列を定義したり、例えば配列‘ａ，ｂ，ｘ’と配列‘ｃ，ｄ，ｘ’と、配列‘ｅ，ｆ，ｘ’のように各配列の最終段のデータｘが共通な複数の配列を定義することにより、その配列が複雑となり、データ解析や不正コピーの困難さが一層増すことになる。
【００３５】
尚、本発明にいう、上記「互いに異なるデータ」は、そのうちの一方が正常動作を続行することのできる「正常な」データ、他方が例えばシステムダウン等を生じさせる「異常な」データであってもよく、あるいは上記「互いに異なるデータ」は、いずれも、プログラムフローにおける互いに別の場面における正常な動作を行なわしめる「正常な」データであってもよい。
【００３６】
【実施例】
図１は、本発明の一実施例を採用した制御システムの全体構成を示すブロック図である。なお、従来のものと変わらないものは同一番号が用いられている。
同図で、注目すべきは、ソフトウェアが格納されるカセット９が、ＲＯＭ４とデータフロー制御装置１０により構成されている点である。従ってカセット９の外部に出されるアドレス線７およびデータ線８等は従来のものと何ら変わらないものとして提供でき、カセット９を除いた従来の制御システムあるいはゲームシステムをそのまま使用することが可能となる。
【００３７】
ここで、図１に示すデータフロー制御装置１０の第１実施例について詳細する。
まず、ＲＯＭ４の中には、図２に示す如く、各アドレスＡに図示のごとくデータＤが格納されており、ＲＯＭ４には、アドレス線７からデータフロー制御装置１０を介してアドレスデータが入力される。また、同様にＲＯＭ４からの出力データは、データフロー制御装置１０を介してデータ線８に出力される。もちろん、このアドレス線７の全部又は一部、又はデータ線８の一部が直接ＲＯＭ４に接続されても良い。
【００３８】
ここで、ソフトウェアの正常の動作からすると、アドレスデータの入力順序がＪ−２→Ｊ−１→Ｊ→Ｊ＋２であるとする。このとき、データフロー制御装置１０内に、複数のアドレスデータの組合せ（Ｊ−２，Ｊ−１，Ｊ，Ｊ＋２）に対応して正規のデータＤ（Ｊ＋２）を定義しておき、一方ＲＯＭ４には、アドレスデータＪ＋２に対応してシステムダウンを生じるデータ‘ＢＲＥＡＫ’を定義しておく。
【００３９】
このようなソフトウェアによる、この制御システムが動作している時のアドレスの処理手順とその出力データは、図３の（ａ）のようになる。即ち、アドレスデータＪ−２、Ｊ−１およびＪに対しては、ＲＯＭ４に格納されている各データＤ（Ｊ−２）、Ｄ（Ｊ−１）およびＤ（Ｊ）が出力され、次の処理はアドレスＪ＋２となり、ＲＯＭ４に格納されているデータはＢＲＥＡＫでシステムをダウンさせるものであるが、このデータはデータフロー制御装置１０で出力を止められ、その代わりにデータＤ（Ｊ＋２）がデータ線８に出力され、正常な動作が続行される。ところが、不正なデータコピーを行う場合は、この実際のソフトウェアの処理手順、いいかえればアドレスのフローを解明することなく、アドレスを順次入力し、入力された各アドレスに対応して出力されるデータを読み取ることになる。この場合の各アドレスに対する出力データは、アドレスデータの組合せ（Ｊ−２，Ｊ−１，Ｊ，Ｊ＋２）によるデータの置換は生じないため、図３（ｂ）のようになり、アドレスＪ＋２に対するデータとしてＢＲＥＡＫしか得ることが出来ず、このようなデータでソフトウェアを動かそうとしてもある時点でシステムがダウンし動作不能になる。
【００４０】
このように、ここでは、実際のソフトウェアが動作する時に存在するアドレスの不連続性と、一連の処理のためには複数のアドレスからのデータが必要であるというアドレスの関連性の２点に着目している。この点から、特定のアドレスの出力データを、最新に入力されたアドレスデータのみでなく、それ以前に入力されたアドレスデータとも関連づけ、それら複数のアドレスデータの組合せをキーデータとしてそのキーデータに対応するデータをデータフロー制御装置１０に格納しておき、一方通常のＲＯＭ４の中には、ダミーデータ（上記の例ではシステムをダウンさせる‘ＢＲＥＡＫ’データ）を入れておく。こうすることで、ソフトウェアの処理手順を全て知るその開発者でない限り、それがダミーデータかどうか全くわからず、又何がキーデータなのかもわからないものとしている。
【００４１】
また、この実施例では、Ｄ（Ｊ＋２）のキーデータとしてアドレスＪ−２、Ｊ−１、Ｊおよび自らのアドレスＪ＋２の４つの組合せが定義されており、これら４つのアドレスデータがその順序に入力されたとき初めて正規のＤ（Ｊ＋２）の出力を得るものであるが、このキーデータとして定義されるアドレスデータの数を色々と変化させたり、各キーデータの数を増やすことによって置換されるべきデータの数を増加させることで、違法なコピーを更に困難にすることが出来る。
【００４２】
次に、本発明のデータフロー制御装置１０の一例を、より具体的に、図４および図５を用いて説明する。
この例では簡単のために、アドレス線７から２ビットのアドレスが入力され、出力データも２ビットであってデータ線８ａ，８ｂから出力され、さらにＲＯＭ４からの２ビットデータが出力データ線４２ａ，４３ａから入力されるものとする。また、キーデータ（定義された配列に合致した検索データ）も２ビットアドレスの２つを１組とし、２つのアドレスデータ（０，０）→（１，１）の組合せからなるキーデータに対して出力データとして（０，１）を出力し、２つのアドレスデータ（１，０）→（０，０）の組合せからなるキーデータに対して出力データ（１，０）を出力するものとする。これら２組の組合せ以外の場合は、ＲＯＭ４から出力データ線４２ａ，４３ａに出力された出力データをそのまま出力するものとする。またＲＯＭ４にはアドレス線７から分岐したアドレス線（図示せず）がそのまま接続されているものとする。
【００４３】
このデータフロー制御装置１０にはセレクタ４６が設けられており、この出力がデータ線８ａ，８ｂと接続されている。このセレクタ４６への２組の入力の一方の組は、ＲＯＭ４からの出力データ線４２ａ，４３ａに、他方の組は、データ出力線４２ｂ，４３ｂに接続されている。このセレクタ４６の内部には、ｎチャネルトランジスタＴｎとｐチャネルトランジスタＴｐが２組あり、セレクタ制御信号線５１が“０”の時（キーデータの入力がない時）は、ＲＯＭ４からの出力線４２ａ，４３ａがデータ線８ａ，８ｂに接続されてＲＯＭ４の出力データがそのまま出力され、セレクタ制御信号線５１が“１”の時（キーデータの入力があった時）は、データ出力線４２ｂ，４３ｂがデータ線８ａ，８ｂに接続されてデータフロー制御装置１０内のデータが出力されることになる。
【００４４】
尚、この例では簡単のためにセレクタ４６を用いているが、これはある演算処理を行うものであっても良い。また、例えばＲＯＭ４からの出力線４３ａについてはセレクタ４６を介さずに直接にデータ線８ｂに接続する等、キーデータの入力があったときにデータフロー制御装置１０内のデータに置き換えるのは、ＲＯＭ４から出力されたデータの一部のビットのみであってもよい。
【００４５】
ここでデータ出力線４２ｂ，４３ｂは一般的なダイナミック型センスアンプ５２の出力に接続されている。ダイナミック型センスアンプ５１は、一般的にまず、そのインバータ１５１の入力にあたるビット線１５２をプリチャージトランジスタ１５３によってあらかじめプリチャージしておき、メモリセルＭ１１，Ｍ１２，Ｍ２１，Ｍ２２によるこのビット線１５２の電位変化を検出するものである。ここに示す実施例では、各メモリセルＭ１１，Ｍ１２，Ｍ２１，Ｍ２２は、制御トランジスタ１５４にシリーズに接続されるトランジスタがディプレッショントランジスタＴｄであるかそれともエンハンスメントトランジスタＴｅであるかにより、それぞれデータ“１”および“０”が表現されている。この動作をもう少し詳しく説明すると、キーデータとしてのアドレスデータ群（この実施例の場合は２個のアドレスデータ＝４ビット）が入力されると制御ワード線１５５の内１つが“１”レベルとなり、かつメモリセルＭ１１，Ｍ１２，Ｍ２１，Ｍ２２に接続されたワード線Ｗ１，Ｗ２のうち選択された方の電位が“０”レベルとなる。今、仮にワード線Ｗ１が“０”レベルとなると、メモリセルＭ１１，Ｍ１２が選択され、これらのメモリセルＭ１１，Ｍ１２はそれぞれエンハンスメントトランジスタＴｅとディプレッショントランジスタＴｄであり、メモリセルＭ１１は非導通、メモリセルＭ１２はグランドラインへ導通となる。図中２本のビット線１５２のうち右側のビット線１５２のみがグランドにおち、その結果、ダイミックアンプ５２はそれらの反転信号を出力するために、データ出力線４２ｂからは“０”、データ出力線４３ｂからは“１”が出力される。
【００４６】
また、この時、制御ワード線１５５の内１つ（ここでは図中２本の制御ワード線１５５のうちの上側の制御ワード線）が“１”レベルとなるために、これに接続されたセレクタ制御トランジスタ１５６がオンすることで、あらかじめプリチャージされていたセレクタ制御信号検知線１５７が“０”レベルとなり、このレベルがダイナミック型センスアンプ５２で検出され、セレクタ制御信号線５１が“１”となり、セレクタ４６がデータ出力線４２ｂ，４３ｂ側に切り換えられメモリセルＭ１１，Ｍ１２からのデータ（０，１）がデータ線８ａ，８ｂに出力されることになる。
【００４７】
データフロー制御装置１０のデータ出力部（図中右半分）に関しては以上であるが、次に、このデータ出力部を制御するキーデータ参照部（図中左半分）に関して説明する。
まずアドレス線７から入力されるアドレスデータはシフトレジスタ４７に入力される。またこのアドレス線７には、このアドレスデータの変化を検知するＡＴＤ（アドレストランジションディテクタ）４８が接続されこの信号によりシフトレジスタ４７を駆動し、かつ制御回路４９を用いて、制御信号線５０にのせる全体の制御信号を作り出している。
【００４８】
まず、アドレス線７からアドレスデータが入力されると、新たなアドレスデータが入力されたことによるアドレスデータの変化がＡＴＤ４８により検知され、その出力信号により、アドレスデータが変化する毎にその新たなアドレスデータがシフトレジスタ４７に入力される。シフトレジスタ４７は、本実施例では各２ビットの２つのレジスタＤ１，Ｄ２より成り、２ビットのアドレスデータを２組、入力された順に格納する。即ち、常に２組のアドレスデータを時系列に格納することが可能となっている。
【００４９】
また、このシフトレジスタ４７に格納されたアドレスデータは、各ビット毎にインバータ群１４１に入力され、インバータ群１４１によりその各ビットの正転信号および反転信号が生成されて一致検出回路１４２に入力される。一致検出回路１４２は、本実施例では、一例としてダイナミック型のＮＡＮＤデコーダが採用されている。各ビットに対してエンハンスメントトランジスタＴｅとディプレッショントランジスタＴｄが１組になり、これらが４ビット分、即ち４組シリアルに接続され、その一端に前述と同様なダイナミック型センスアンプ５２が接続され、他端には制御トランジスタ１４３が接続されている。
【００５０】
前述の説明と同様に、このダイナミック型センスアンプ５２は、インバータ１５１の入力側をあらかじめプリチャージしておいて、その電位変化を検出するものである。従ってこの電位が“０”レベルとなり、インバータ１５１の出力が“１”レベルになるためには、ダイナミック型ＮＡＮＤデコーダを構成するシリアルに接続されたエンハンスメントトランジスタＴｅとティプレッショントランジスタＴｄの全てがオンとなり、かつ制御トランジスタ１４３もオンとなることが必要となる。この条件が満されて初めて、ダイナミック型センスアンプ５２の出力が“１”となり、前述のごとく制御ワード線１５５の１つが“１”となり、データフロー制御装置１０のメモリ部が選択されセレクタ４６により出力されるわけである。
【００５１】
ＮＡＮＤ型デコーダのトランジスタの全てがオンとなる条件に関して、図中、上部左端の、ディプレッショントランジスタＴｄとエンハンスメントトランジスタＴｅの１組のトランジスタを用いて説明する。
まず、これらのトランジスタのゲートには、アドレスデータの１ビットのデータの正転データ線１４４および反転データ線１４５が接続されている。ディプレッショントランジスタＴｄは、そのゲート電圧が“０”レベルでもオンすることから、この１組のシリアルに接続されたトランジスタが両方オンするのは、片方のエンハンスメントトランジスタＴｅのゲートに“１”レベルの電圧が印加された時、即ちアドレスのその１ビットが“０”であった時となる。このようにして、図面左部上端のＮＡＮＤ型デコーダは、２組のアドレスデータが、（０，０）→（１，１）の時に全てオンし、メモリ部から（０，１）が出力されることがわかる。また、その下のもう一方のＮＡＮＤ型デコーダに関しても、アドレスデータとして（１，０）→（０，０）が入力された時に、そのダイナミック型センスアンプ５２の出力が“１”となり、メモリ部から（１，０）が出力されることになるわけである。もちろんこの時、制御信号線５０は、“１”レベルとなり制御トランジスタ１４３がオンとなることはいうまでもない。
【００５２】
この動作のタイミングチャートを示したものが図５である。アドレス線７よりデータフロー制御装置１０およびＲＯＭ４（図１参照）にアドレスデータが与えられると、データ線４２ａ，４３ａを介してＲＯＭ４の出力データが入力される。また、同時にＡＴＤ４８によりアドレス変化を検知してパルスが発生する。このパルスを基に図５に示すような制御信号が生成されるとともに、アドレスデータがシフトレジスタ４７へ入力されるが、ＮＡＮＤ型デコーダに書き込まれたキーデータと一致しなければ、セレクタ制御信号は“０”のままであり、ＲＯＭ４からの出力データがそのままデータ線８ａ，８ｂに出力される。
【００５３】
一方、キーデータと入力アドレスデータ組とが一致すると、セレクタ制御信号が“１”レベルとなり、データフロー制御装置１０のメモリ部からの内部データが出力される。ここでＮＡＮＤ型デコーダのどのトランジスタをエンハンスメントトランジスタＴｅにするか、またメモリ部のどの部分をエンハンスメントトランジスタＴｅにするかによってキーデータやそれに対応する出力データを定義することが可能となる。
【００５４】
もちろん、この実施例に示す回路方式は一例に過ぎないものであり他の公知回路方式を用いても良いことは言うまでもない。
また上記実施例は、ＲＯＭ４とは別にデータフロー制御装置１０を構成した例であるが、データフロー装置１０をＲＯＭ等のメモリ装置内部に組み込んでもよい。
【００５５】
次に、本発明のデータフロー制御装置１０の第２実施例について説明する。
ここでは、ＲＯＭ４の中には、図６に示す如く、各アドレスＡに図示の各データＤが格納されているものとし、図７に示すように、ソフトウェアの正常の動作からすると、アドレスデータの入力順が、Ａ（ｎ）→Ａ（ｎ＋１）→…→Ａ（ｊ）→Ａ（ｊ＋１）→Ａ（ｊ＋２）→Ａ（ｋ）→Ａ（ｍ）であるとする。ここではこれらのアドレスデータのうち、必要に応じて途中を間引いたアドレスデータの配列｛Ａ（ｎ），Ａ（ｊ），Ａ（ｋ）｝と、この配列にさらにアドレスデータＡ（ｍ）を加えた配列｛Ａ（ｎ），Ａ（ｊ），Ａ（ｋ），Ａ（ｍ）｝との２つの配列に着目し、これらの２つの配列｛Ａ（ｎ），Ａ（ｊ），Ａ（ｋ）｝，｛Ａ（ｎ），Ａ（ｊ），Ａ（ｋ），Ａ（ｍ）｝にそれぞれ対応づけられた正規のデータＤ（ｋ），Ｄ（ｍ）をデータフロー制御装置１０内のアドレスＡ（ｋ），Ａ（ｍ）に定義しておく。一方ＲＯＭ４には、アドレスＡ（ｋ），Ａ（ｍ）には、システムダウンを生じるデータ’ＢＲＥＡＫ１’，’ＢＲＥＡＫ２’を各々定義しておく。
【００５６】
このようなソフトウェアによる、この制御システムが動作している時のアドレスの処理手順とその出力データは、図７（ａ）のようになる。即ち、アドレスデータＡ（ｋ），Ａ（ｍ）以外は、ＲＯＭ４に格納されているデータが出力されるが、アドレスデータＡ（ｋ），Ａ（ｍ）が入力された際は、、システムをダウンさせる’ＢＲＥＡＫ１’，’ＢＲＥＡＫ２’がＲＯＭ４から出力されるのではなく、その代わりにデータフロー制御装置１０から正規のデータＤ（ｋ），Ｄ（ｍ）が出力され、正常な動作が続行される。ところが不正なデータコピーを行う場合は、この実際のソフトウェアの処理手順、いいかえれば正規のアドレスのフローとは無関係に、例えば、アドレスを順次入力し、入力された各アドレスに対応して出力されるデータを読み取ることになる。この場合の各アドレスに対応して出力するデータは、図７（ｂ）のようになり、アドレスＡ（ｋ），Ａ（ｍ）に対するデータとして’ＢＲＥＡＫ１’，’ＢＲＥＡＫ２’しか得ることが出来ず、このようなデータでソフトウェアを動かそうとしてもある時点でシステムがダウンし動作不能になる。
【００５７】
このように、ここでは、実際のソフトウェアが動作する時に存在するアドレスの不連続性と、一連の処理のためには複数のアドレスからのデータが必要であるというアドレスの関連性の２点に着目している。この点から、特定のアドレスの出力データを、最新あるいはその時に入力されたアドレスデータのみだけでなく、それ以前に入力されたアドレスデータとも関連づけ、それらの複数のアドレスデータの組合せをキーデータとして、そのキーデータに対応するデータをデータフロー制御装置１０に格納しておき、一方通常のＲＯＭ４の中には、ダミーデータ（上記の例ではシステムをダウンさせる’ＢＲＥＡＫ１’，’ＢＲＥＡＫ２’のデータ）を入れておく。こうすることで、ソフトウェアの処理手順を全て知る開発者でない限り、それがダミーデータかどうか全くわからず、又何がキーデータなのかもわからないものとしている。
【００５８】
また、この実施例ではデータＤ（ｋ）のキーデータとしてアドレスデータＡ（ｎ），Ａ（ｊ）および自らのアドレスＡ（ｋ）の３つのアドレスデータ、およびデータＤ（ｍ）のキーデータとしてアドレスデータＡ（ｎ），Ａ（ｊ），Ａ（ｋ）および自らのアドレスＡ（ｍ）の４つのアドレスデータの中での順番が定義されており、これら３つないし４つのアドレスデータの発生順序により正規のデータＤ（ｋ），Ｄ（ｍ）を各々アドレスデータＡ（ｋ），Ａ（ｍ）の入力に対応させて出力している。もちろん、この例に示した３つないし４つのアドレスデータの配列に限らず、一連の処理を行うためにアクセスされる複数のアドレスの中から任意の個数、任意の場所のものを選び、ダミーデータをＲＯＭ４に、正規のデータとそのキーデータをデータフロー制御装置１０に入力しておくことが可能である。このキーデータとして定義されるアドレスデータの数を色々と変化させたり、各キーデータの数を増やすことによって置換されるべき正規データの数を増加させることで、違法なコピーを更に困難にすることが出来る。
【００５９】
次に、本発明のデータフロー制御装置１０の第２実施例の回路構成について図８のブロック図および図９のタイミングチャート図を用いて説明する。
まず、図８に示すアドレス線７を介してアドレスデータが一致検出部２４１に入力される。同時に、帰還レジスタ２４２に格納されたデータがこの一致検出部２４１に入力され、この帰還レジスタ３４２に格納されたデータとアドレスデータの両方に一致する一致ブロック２４３のワード線２４３ｗがアクティブとなる。これによりその真横のメモリブロック２４５が選択される。
【００６０】
各メモリブロック２４５は、帰還レジスタ制御フラグ２４５ａ、帰還データ２４５ｂ、出力データ２４５ｃおよびセレクタ制御フラグ２４５ｄより成っている。また、一致ブロック２４３は、アドレスデータ一致部２４３ａおよび帰還データ一致部２４３ｂより成っている。
まずアドレス線７を経由してアドレスデータＡ（ｎ）が、一致検出部２４１に入力される。この時一致検出部２４１の第４番目の一致ブロック２４３のアドレスデータ一致部２４３ａにＡ（ｎ）が入っている。また、その第４番目の一致ブロック２４３の帰還データ一致部２４３ｂは、ドントケア状態（どのようなデータに対しても一致したものとみなす状態）に設定されている。この結果、第４番目の一致ブロック２４３に一致が発生し、そのワード線２４３ｗがアクティブとなり、同図真横の第４番目のメモリブロック２４５が選択され、その格納データが各々出力される。この格納データのセレクタ制御フラグ２４５ｄは’０’であるため、セレクタ２４６は、データ入力線２４７を経由して入力されたＲＯＭ４からの出力信号を、データ線２４８に出力する。また、帰還レジスタ制御フラグ２４５ａの’１’信号を遅延回路２４９で遅延することにより生成された帰還レジスタ制御信号によって帰還データ４５ｂの’１’データが、帰還レジスタ４２に入力される。この状態を示すものが、図９のタイミングチャートの時刻Ｔ１である。同図のＡＴＤ出力および制御信号は、アドレス線７のアドレスデータの変化を制御回路２４９で検知し、それに基づいて生成される信号であって、データフロー制御装置１０全体を制御するものである。
【００６１】
更に複数のアドレス信号がアドレス線７を介してデータフロー制御装置１０に入力され、同時にＲＯＭ４へもそのアドレス信号が入力される。ＲＯＭ４からは、各アドレスに応じたデータが出力されるが、アドレス信号Ａ（ｊ）が入力されない限りデータフロー制御装置１０の一致検出部２４１で一致するものはなく、セレクタ４６は、常にＲＯＭ４からの出力をデータ線８に出力することになる。
【００６２】
また、帰還レジスタ制御信号も常に’０’であり帰還レジスタ２４２の値は’１’の状態を保つ。ここでアドレス信号Ａ（ｊ）が入力されると、一致検出部２４１の第２番目の一致ブロック２４３のアドレスデータ一致部２４３ａが一致する。また、この一致ブロック２４３の帰還データ一致部２４３ｂには、あらかじめ’１’の値が設定されており、この値も一致することになり、その結果この第２番目の一致ブロック２４３のワード線２４３ｗが立ち上がり、その真横のメモリブロック２４５のメモリデータが検出される。このメモリブロック２４５の、セレクタ制御フラグ２４５ｄは’０’であるため、セレクタ２４６はＲＯＭ４からのデータをデータ出力線８に出力する。またこのとき、帰還レジスタ制御フラグ２４５ａは’１’であり、帰還データ２４５ｂは’２’であるので、またこのとき帰還レジスタ２４２へは’２’が入力保持される（図９の時刻Ｔ２）。
【００６３】
同様にして、アドレスデータＡ（ｋ）が入力されるまでは、ＲＯＭ４からの出力が、セレクタ４６を介してデータ出力線８に出力される。
ところで、アドレスデータＡ（ｋ）が入力されると、一致検出部２４１の第５番目のアドレスデータ一致部２４３ａが一致し、またこの時、帰還データ一致部２４３ｂの値には’２’が設定されており、この部分もまた一致することになる。そのため、この一致ブロック２４３に対応したメモリブロック２４５のデータが検出される。このデータのセレクタ制御フラグ２４５ｄが’１’であるために、今度はＲＯＭ４からのデータは出力されずに、それにその代わり一致ブロック２４３に対応する出力データ２４５ｃの値、即ちＤ（ｋ）がセレクタ２４６を介して出力されることになる。
【００６４】
また、これと同時に、帰還レジスタ制御フラグ２４５ａが’１’であるため帰還データ２４５ｂの’３’が帰還レジスタ２４２に入力保持される（図９の時刻Ｔ３）。
次にアドレスＡ（ｍ）が入力された時も同様であり、このデータフロー制御装置１０に格納されたデータＤ（ｍ）が、ＲＯＭ４からの出力に代わって出力される（図９の時刻Ｔ４）。
【００６５】
このように、その時点に入力されているアドレスだけで出力データを決定するのではなく、特定のアドレスに対しては、その前に入力されたソフトウェア実行時のアドレス系列によってその出力を決めることにより、不正なアドレス動作におけるコピーが防止されるのである。
また、この例に示すように、例えばアドレスデータＡ（ｎ）等の後に期待されていないどんなアドレスデータが１つもしくは複数個来ても、常に次にキーとなるものを待つことが出来る構成となっているために、近年の処理高速化のためのＣＰＵのプリフェッチ動作による、ソフトウェアの処理手順を考慮しない連続したアドレスによるデータの先き読みに対しても誤動作することなく、適切なキーデータの抽出と、正規データの出力が可能となる。
【００６６】
次に、図８のブロック図中の主要構成要素の具体的回路例について説明する。先ず、一致検出部２４１の一致ブロック２４３の各回路例を図１０（ａ），（ｂ）に示す。図１０（ａ）および（ｂ）は、プログラマブルデコーダによる構成を有し、且つコンパクトなデザインを目的として複数の入力トランジスタを複数個シリーズに接続したダイナミック型ＮＡＮＤ回路を採用している。
【００６７】
図１０（ａ）は、エンハンスメント型トランジスタ２６４をシリーズに複数個接続したものであり、このトランジスタ２６４のゲートに、入力信号線２６８の正論理線２６８ａが接続されるか、もしくは負論理線２６８ｂが接続されるかによって、各々’１’と一致するか’０’と一致するかを定義するものである。また、このシリーズに接続されたエンハンスメント型トランジスタ２６４の一端には制御トランジスタ２６１、他端にはダイナミックセンスアンプ２６０が接続されており、各々制御信号線２６２で制御されている。アドレスデータ一致部２４３ａを例として具体的に動作を検証してみる。
【００６８】
まず、制御信号線２６２に’０’信号が印加され、制御トランジスタ２６１はオフ、ダイナミックセンスアンプ２６０のプリチャージトランジスタ２６０ａはオンし、インバータ２６０ｂの入力ノードに電荷がチャージされその入力ノードは’１’、その出力は’０’となっている。
また、この時すでにシリーズに接続されたエンハンスメント型トランジスタ２６４の各々には、アドレス信号が印加されている。
【００６９】
次に、制御信号線２６２が’１’信号に変化すると、制御トランジスタ２６１がオンし、プリチャージトランジスタ２６０ａがオフする。
この時、シリーズに接続されたエンハンスメント型トランジスタ２６４のゲートへの信号線の接続状態により定められるそこに定義されたデータと、入力アドレス信号が等しい時、例えば、ゲートが正論理線２６８ａに接続されており、入力アドレス信号が’１’の時は、そのエンハンスメント型トランジスタ２６４はオンする。同様に、ゲートが負論理線２６８ｂに接続されており、入力アドレス信号が’０’の時は、インバータ２６９で反転された信号’１’が負論理線２６８ｂに印加され、やはりそのエンハンスメント型トランジスタ２６４はオンする。即ち、入力アドレス信号とゲートの接続状態が一致する時、このエンハンスメント型トランジスタ２６４はオンする。しかし、これが不一致の時はゲートに’０’が印加されオフのままである。
【００７０】
そこでシリーズに接続されたエンハンスメント型トランジスタ２６４の全ての接続状態と入力アドレス信号が一致する時、それらは全てオンとなり、ダイナミックセンスアンプ２６０のインバータ２６０ｂの入力ノードにチャージされた電荷がディスチャージされ’０’となる。この’０’信号がインバータ２６０ｂで反転され一致信号’１’を出力する。
【００７１】
更に、この一致信号’１’は、次段のダイナミック型ＮＡＮＤ回路により構成される帰還データ一致部２４３ｂの制御トランジスタ２６１のゲートに入力されている。
これによって帰還データ一致部２４３ｂの制御トランジスタ２６１がオンし、上記と同様にして、入力される帰還データとエンハンスメント型トランジスタ２６４のゲートの接続状態で定義されているデータとが一致することにより、ワード線２４３ｗに’１’が出力されることになる。
【００７２】
以上がシリーズに接続されたエンハンスメント型トランジスタのゲートへの接続状態によりデータを定義した一致ブロック２４３の一例である。しかしながらこの方法は、ゲートへのコンタクトパターンを直接目視することが可能であり、ＬＳＩの分解調査で一致データを判読されてしまう可能性が残る。そこで次に、この目視による判読をほぼ完全に不可能にできる回路方式について同図（ｂ）を用いて説明する。
【００７３】
同図（ｂ）に於ては、シリーズに接続される基本となるトランジスタ構成が、同図（ａ）とは異り、エンハンスメント型トランジスタ２６６ａとディプレッション型トランジスタ２６６ｂとのトランジスタペア２６６より成り、各々が正論理信号線２６８ａもしくは負論理信号線２６８ｂに接続されている。
エンハンスメント型トランジスタ２６６ａであるかディプレッション型トランジスタ２６６ｂであるかは、外見上は全く判断できない。これは、両トランジスタの違いが、そのゲート直下の不純物の濃度等の違いによるしきい値電圧の差異だけであるからである。
このトランジスタペア２６６の動作に関しては、まず入力信号’１’と一致とる場合は、正論理線２６８ａに接続されたトランジスタをエンハンスメント型にし、負論理線２６８ｂに接続されたトランジスタをディプレッション型とする。こうすると、仮に、入力信号線２６８に’１’が入力されると、正論理線２６８ａに’１’、負論理線２６８ｂに’０’が印加される。この時、エンハンスメント型トランジスタ２６６ａはゲートに’１’が印加されてオンする。ところがディプレッション型トランジスタ２６６ｂは、そのしきい値電圧が負であるために、ゲート電圧が’０’でも’１’でもオンする。従って、このトランジスタペア２６６はオンすることになり、一致したことになる。
【００７４】
逆に、入力信号線２６８に’０’が入力されると、正論理線２６８ａが’０’となり、エンハンスメント型トランジスタ２６６ａがオフする。つまりトランジスタペア２６６はオフとなり、不一致であったことになる。
このように、トランジスタペア２６６のどちらをエンハンスメント型トランジスタ２６６ａとするかによってデータを定義することができ、入力データとの一致不一致を検出することが可能となる。同図（ｂ）では、これらのペアが同図（ａ）と同様にシリーズに接続され、ダイナミック型ＮＡＮＤ回路が構成されている。
【００７５】
ここで、トランジスタペア２６６の両トランジスタをディプレッション型とすることで入力データの如何にかかわらずこのペアをオンとする、即ちドントケア状態が定義されることになる。
また、これらの例では、データの値はあらかじめ製造工程で作り込まれているが、かならずしもこの必要はなく、データの書き換えが可能なＳＲＡＭ，ＥＰＲＯＭやＥ２  ＰＲＯＭ等で構成されても良い。図１１はＳＲＡＭタイプの一例を示すものであるが、簡単のために、図１０（ａ）のシリーズに接続される基本要素のエンハンスメント型トランジスタ２６４に相当する部分のみをＳＲＡＭに代えた場合の一例を示すものであり、同図中点線で囲んだ部分がそれにあたる。
【００７６】
通常のＳＲＡＭ２７１の内部ノードＱ，Ｑ＿にトランジスタＴ３およびトランジスタＴ４が接続され、このシリーズに接続された両トランジスタの間にトランジスタＴ５が接続されている。入力信号線２６８の正論理信号がビット線２７２ａに、負論理信号がビットバー線２７８ｂに印加される。
まず、このＳＲＡＭ２７１に’１’データが保持されているものとする。即ち、Ｑが’１’，Ｑ＿が’０’であるとする。仮に、入力信号が’１’であってＳＲＡＭ２７１に保持されたデータと一致する場合は、Ｑ＝’１’であるためトランジスタＴ３がオンし、入力の正論理信号’１’がトランジスタＴ５のゲートに印加され、このトランジスタＴ５がオンする。このトランジスタＴ５がシリーズに接続されダイナミック型ＮＡＮＤを構成しており、したがって、全てのＳＲＡＭのデータが入力信号と一致する時、ダイナミックセンスアンプ２６０から一致出力’１’が得られる。
【００７７】
入力信号が’０’であって、かつＳＲＡＭ２７１のデータが’０’の場合は、同様に、負論理信号’１’が、Ｑ＿＝１でオンしているトランジスタＴ４を介してトランジスタＴ５のゲートに印加される。
また、ＳＲＡＭ２７１のデータと入力信号が不一致の場合、例えば、入力信号が’１’で、ＳＲＡＭ２７１のデータが’０’（Ｑ＝’０’，Ｑ＿＝’１’）の時は、オンするトランジスタＴ４を介して入力信号の負論理信号’０’がトランジスタＴ５のゲートに印加されオフ状態となる。逆の場合も、同様である。
【００７８】
尚、この一致不一致を検出する時は、ＳＲＡＭ２７１のワード線２７３は’０’の状態を保つ。ＳＲＡＭ２７１にデータを書き込む場合は、ワード線７３を’１’の状態とする等通常のメモリ動作を行うことになる。
次に、メモリ部２４４のメモリブロック２４５の具体例を示すものが図１２（ａ），（ｂ）である。ここでも、エンハンスメント型メモリトランジスタ２８１を使用したもの（同図（ａ））と、ディプレッション型メモリトランジスタ２８４ａを使用（同図（ｂ））した２例が挙げられている。
【００７９】
まず、同図（ａ）において、複数のエンハンスメント型メモリトランジスタ２８１のゲートが、各メモリブロック２４５毎に同一ワード線２４３ｗに接続されており、帰還レジスタ制御フラグ２４５ａ、帰還データ２４５ｂ、出力データ２４５ｃおよびセレクタ制御フラグ２４５ｄを構成している。
各エンハンスメント型メモリトランジスタ２８１は、ビット線２８０に接続部２８２が接続されているか否かによって’１’か’０’を表現している。ここでは接続部２８２の黒丸が接続状態を表わし、白丸が非接続状態を表わしている。このビット線２８０の先には、ダイナミックセンスアンプ２６０が形成されている。まず制御信号線２６２が’０’となり、プリチャージトランジスタ６２ａにより各ビット線２８０がプリチャージされる。この時ワード線２４３ｗは’０’にセットされている。次に、制御信号線２６２が’１’となり、次でワード線２４３が’１’になると、各々のエンハンスメント型メモリトランジスタ２８１がオンとなる。これにより、接続部２８２が接続状態にあるビット線からこのエンハンスメント型メモリトランジスタ２８１を介して電荷がディスチャージされ、これをダイナミックセンスアンプ２６０が検出し、’１’を出力する。逆に、接続部２８２が非接続状態のものはビット線２８０の電荷が保持され、’０’出力となる。
【００８０】
この場合も接続部２８２はコンタクト等の形状が残るパターンで形成されることが多く、やはり分解調査によりデータ解析されてしまう可能性が残る。そこで、この場合もイオンの注入量あるいは注入不純物の違いによるしきい値電圧を変えるような形状変化の残らないメモリ定義による回路例を同図（ｂ）に示す。
基本メモリ２８３は、２つのトランジスタより成る。セレクトトランジスタ２８４とメモリトランジスタ２８５であり、これらがシリーズに接続されている。メモリトランジスタ２８５はエンハンスメント型トランジスタ２８５ｂとディプレッション型メモリトランジスタ２８５ａの２種類があり、各々データ’０’と’１’に対応する。
【００８１】
つまり、ワード線２４３ｗが’１’となると、セレクトトランジスタ２８４は全てオンとなる。この時ワード線２４３ｗをインバータ２８６で反転した信号’０’に接続されるメモリトランジスタ２８５は、そのタイプがエンハンスメント型かディプレッション型かで各々オフするかオンするかに分かれる。
即ち、ディプレッション型メモリトランジスタ２８５ａの場合は、あらかじめプリシャージされたビット線２８０の電荷がディスチャージされダイナミックセンスアンプ２６０により’１’を出力する。一方、エンハンスメント型メモリトランジスタ２８５ｂの場合は、ビット線の電荷は保持され’０’を出力することになる。しかしながら、外見上はこれらのトランジスタは全く同じであり、分解調査は極めて困難となる。
【００８２】
もちろん、上述した実施例に示す回路方式は一例に過ぎないものであり他の公知回路方式を用いても良いことは言うまでもない。またプロセスに関しても、ＲＯＭに限らず、Ｅ２  ＰＲＯＭ、フラッシュＲＯＭ、ＳＲＡＭ等、特に限定されるものではない。
また上記実施例は、ＲＯＭ４とは別にデータフロー制御装置１０を構成した例であるが、データフロー制御装置１０をＲＯＭ等のメモリ装置内部に組み込んでもよい。
【００８３】
次に、本発明のデータフロー制御装置１０の第３実施例について説明する。
ＲＯＭ４の中には、図６に示す如く、各アドレスＡに図示の各データＤが格納されているものとし、ここで、図１３に示す如く、ソフトウェアの正常の動作からすると、アドレスデータの入力順が、Ａ（ｎ）→Ａ（ｎ＋１）→…→Ａ（ｊ）→Ａ（ｊ＋１）→Ａ（ｊ＋２）→Ａ（ｋ）→Ａ（ｍ）であるとする。ここでは、これらのアドレスデータのうち、必要に応じて途中を間引いたアドレスデータの配列｛Ａ（ｎ），Ａ（ｊ），Ａ（ｋ）｝と、この配列にさらにアドレスデータＡ（ｍ）を加えた配列｛Ａ（ｎ），Ａ（ｊ），Ａ（ｋ），Ａ（ｍ）｝との２つの配列に着目し、かつそれらの配列を構成するアドレスデータ間の距離に着目している。ここで「距離」とは、着目しているある１つのアドレスデータが入力され、その後いくつかのアドレスデータが入力された後もう１つの着目しているアドレスデータが入力されたかを表している。ここでは、アドレスデータＡ（ｎ）が入力されてから次にアドレスデータＡ（ｊ）が入力されるまでの距離は無制限であるとする。即ち、アドレスデータＡ（ｎ）が入力されたすぐ次にアドレスデータ（ｊ）が入力されてもよく、アドレスデータＡ（ｎ）が入力され、その後他のアドレスデータがいくつ入力された後にアドレスデータＡ（ｊ）が入力されてもよいものとする。またアドレスデータＡ（ｊ）とアドレスデータＡ（ｋ）に関しては、その間の距離は３、すなわち、アドレスデータＡ（ｊ）とアドレスデータＡ（ｋ）との間に他のアドレスデータが最大２つまで入り込むことを許容するものとする。さらに、アドレスデータＡ（ｋ）とアドレスデータＡ（ｍ）に関しては、その距離は１，即ち、アドレスデータＡ（ｋ）とアドレスデータＡ（ｍ）との間に他のアドレスデータが入り込んではならないものとする。
【００８４】
上記の配列の順序で、かつ各アドレスデータ間の距離が満たされる時に、データフロー制御装置１０の内部に格納された正規のデータＤ（ｋ），Ｄ（ｍ）が各々アドレスデータＡ（ｋ）とＡ（ｍ）の入力に応答して出力されるよう定義しておく。一方ＲＯＭ４には、各アドレスＡ（ｋ），Ａ（ｍ）には、システムダウンを生じるデータ‘ＢＲＥＡＫ１’‘ＢＲＥＡＫ２’を各々定義しておく。
【００８５】
このようなソフトウエアによる、この制御システムが動作している時のアドレスの処理手順とその出力データは図１３（ａ）のようになる。即ちアドレスデータＡ（ｋ），Ａ（ｍ）以外はＲＯＭ４に格納されているデータが出力されるが、アドレスデータＡ（ｋ），Ａ（ｍ）が入力された際は、システムをダウンさせる‘ＢＲＥＡＫ１’‘ＢＲＥＡＫ２’がＲＯＭ４から出力されるのではなく、その代わりにデータフロー制御装置１０から正規のデータＤ（ｋ），Ｄ（ｍ）が出力され、正常な動作が続行される。ところが不正なデータコピーを行う場合は、この実際のソフトウェアの処理手順、いいかえれば正規のアドレスのフローとは無関係に、例えば、アドレスを順次入力し、入力された各アドレスに対応出力されるデータを読み取ることになる。この場合の各アドレスに対応して出力するデータは、図１３（ｂ）のようになり、アドレスＡ（ｋ），Ａ（ｍ）に対するデータとして‘ＢＲＥＡＫ１’‘ＢＲＥＡＫ２’しか得ることができず、このようなデータでソフトウェアを動かそうとしてもある時点でシステムダウンし動作不能になる。
【００８６】
このように、ここでは、実際のソフトウェアが動作するときに存在するアドレスの不連続性と、一連の処理のためには複数のアドレスからのデータが必要であるというアドレスの関連性の２点に着目している。この点から、特定のアドレスの出力データを、最新あるいはそのときに入力されたアドレスデータのみだけでなく、それ以前に入力されたアドレスデータとも関連づけ、それらの複数のアドレスデータの組合わせをキーデータとして、そのキーデータに対応するデータをデータフロー制御装置１０に格納しておき、一方通常のＲＯＭ４の中には、ダミーデータ（上記の例ではシステムをダウンさせる‘ＢＲＥＡＫ１’，‘ＢＲＥＡＫ２’のデータ）を入れておく。こうすることで、ソフトウェアの処理手順を全て知る開発者でない限り、それがダミーデータかどうか全くわからず、また何がキーデータなのかもわからないものとしている。
【００８７】
また、この実施例ではデータＤ（ｋ）のキーデータとしてアドレスデータＡ（ｎ），Ａ（ｊ）および自らのアドレスＡ（ｋ）の３つのアドレスデータ、およびデータＤ（ｍ）のキーデータとしてアドレスデータＡ（ｎ），Ａ（ｊ），Ａ（ｋ）および自らのアドレスデータＡ（ｍ）の４つのアドレスデータの中での順番と各アドレス間の距離（距離無制限を含む）が定義されており、これら３つないし４つのアドレスデータの発生順序とその距離により正規のデータＤ（ｋ），Ｄ（ｍ）を各々アドレスデータＡ（ｋ），Ａ（ｍ）の入力に対応させて出力している。もちろんこの側に示した３つないし４つのアドレスデータの配列に限らず、一連の処理を行うためにアクセスされる複数のアドレスの中から任意の個数、任意の場所のものを選び、ダミーデータをＲＯＭ４に、正規のデータとそのキーデータをデータフロー制御装置１０に入力しておくことが可能である。またここでは、アドレスの距離に関しても、ある設定範囲以内であればよく、これにより設定の容易化が図られている。このキーデータとして定義されるアドレスデータの数をいろいろと変化させたり、各キーデータの数を増やすことによって置換されるべき正規データの数を増加させることで、違法なコピーを更に困難にすることができる。
【００８８】
次に、本発明のデータ制御装置１０の第３実施例の回路構成について図１４のブロック図および図１５のタイミングチャート図を用いて説明する。
まず、図１４に示すアドレス線７を介してアドレスデータが一致検出部３４１に入力される。同時に帰還レジスタ３４２に格納されたデータがこの一致検出部３４１に入力され、この帰還レジスタ３４２に格納されたデータとアドレスデータの両方に一致する一致ブロック３４３のワード線３４３ｗがアクティブとなる。これによりその真横のメモリブロック３４５が選択される。
【００８９】
各メモリブロック３４５は、カウンタセットフラグ３４５ａ、カウンタイネーブルフラグ３４５ｂ、帰還データ３４５ｃ，カウンタデータ３４５ｄ、出力データ３４５ｅ、およびセレクタ制御フラグ３４５ｆより成っている。また一致ブロック部３４３は、アドレスデータ一致部３４３ａおよび帰還データ一致部３４３よりなっている。
【００９０】
まずアドレス線７を経由してアドレスデータＡ（ｎ）が一致検出部３４１に入力される。このとき一致検出部３４１の第４番目の一致ブロック部３４３のアドレスデータ一致部３４３ａにはアドレスデータＡ（ｎ）が入っている。また、その第４番目の一致ブロック部３４３の帰還データ一致部３４３ｂは、ドントケア状態（どのようなデータに対しても一致したものとみなす状態）に設定されている。この結果、第４番目の一致ブロック部３４３に一致が発生し、そのワード線３４３ｗがアクティブとなり、同図真横の第４番目のメモリブロック３４５が選択され、その格納データが各々出力される。この格納データのセレクタ制御フラグ３４５ｆは‘０’であるため、セレクタ３４６は、データ線３０８ａを経由して入力されたＲＯＭ４からの出力信号を、データ線８に出力する。
【００９１】
また、カウンタセットフラグ３４５ａも’１’であるので帰還レジスタ制御信号の立ち上りで（図１５の時刻Ｔ１）、帰還データ３４５ｃから読み出された値’１’が帰還レジスタ３４２に格納される。それと同時にカウンタデータ３４５ｄの’＊’がカウントセット信号（このカウントセット信号は、カウンタセットフラグ３４５ａの出力を△ｔ２遅らせた信号である）の立ち上りのタイミングでカウンタ３５２に入力される。ここで、このカウンタデータ３４５ｄの値’＊’は、値が何であってもよいことを意味する。その値が何でもよいのは、カウンタイネーブルフラグ３４５ｂが’０’であり、このためカウンタ３５２の状態にかかわらず、帰還レジスタ３４２への出力信号が’１’となるためである。このため、上述した配列を構成する次のアドレスデータＡ（ｊ）が入力されるまでは、帰還レジスタ３４２の値を保持することが可能となり、キーアドレスＡ（ｎ）とＡ（ｊ）が距離に無関係なものとなる。
【００９２】
この帰還レジスタ３４２とカウンタ３５２を具体的に図１６を用いて説明する。帰還レジスタ３４２は複数のフリップフロップ３９０と入力データ制御回路３９１より構成されており、フリップフロップ３９０の出力Ｑが入力データ制御回路３９１に帰還されている。また、この入力データ制御回路３９１には大きく２通りの入力がある。
【００９３】
その１つは、帰還データ３４５ｃであり、この帰還データ３４５ｃはカウンタセットフラグ３４５ａが’１’又はカウンタ３５２の出力、即ちＯＲ回路３９５からの出力’０’の時、帰還レジスタ制御信号の立ち上りタイミング（例えば、図１５の時刻Ｔ１、Ｔ２、Ｔ３、Ｔ４等）で帰還レジスタ３４２に入力される。もうひとつは、フリップフロップ３９０からの帰還データであり、このデータはカウンタセットフラグ３４５ａが’０’で且つカウンタ３５２の出力が’１’の時、上と同様に帰還レジスタ制御信号の立ち上りタイミングで帰還入力され、それまでのデータをそのまま保持する。
【００９４】
この帰還レジスタ制御信号は、図１４の制御回路３４９より出力されるが、これはアドレス線７を介して入力されるアドレスの変化を検出するＡＴＤ出力より作られるものであり、これを更に△ｔ１遅らせ反転させたものが制御信号である（図１５参照）。
また、カウンタ３５２に関しては、カウンタセットフラグ３４５ａ（図１４参照）の信号を△ｔ２だけ遅延させたカウンタセット信号の立ち上りエッジでカウンタデータ３４５ｄの値がカウンタ回路３９２に入力される。カウントダウン端子（ｃｏｕｎｔｄｏｗｎ）には、制御信号カウンタ回路３９２は、アドレスデータが入力される毎に’１’ずつカウントダウンする。
【００９５】
このカウンタ回路３９２の出力の論理和がオア回路３９３で演算され、その出力がオア回路３９５に入力されている。このオア回路３９５には、カウンタイネーブルフラグ３４５ｂがインバータ３９４ａで反転して入力されるフリップフロップ３９４の出力が入力されている。また、このフリップフロップ３９４にはカウンタセット信号の立ち上りタイミングで、カウンタイネーブルフラグ３４５ｂの値が入力され、このフリップフロップ３９４の値が’０’、即ちカウンタがディスエーブルの時は、オア回路３９５により、帰還レジスタ３４２に’１’を出力する。その結果、カウンタセットフラグ３４５ａが’１’でない限り、フリップフロップ３９０のＱ出力を帰還保持する。
【００９６】
また、カウンタイネーブルフラグ３４５ｂが’１’であり、カウンタ３５２がイネーブルの時（フリップフロップ３９４の出力が’０’の時）は、カウンタ回路３９２の出力のいずれかが’１’の時、オア回路３９５の出力が’１’となり同様に、フリップフロップ３９０のＱ出力が帰還保持される。
以上が帰還レジスタ３４２及びカウンタ３５２の概要である。この説明でわかるように、カウンタイネーブルフラグ’０’が一旦取り込まれると、次に入力されることが期待されているアドレスデータＡ（ｊ）が入力されるまでは、カウンタ３５２のカウントダウン動作にかかわらず帰還レジスタ３４２は同じ値を保持し続ける。
【００９７】
次に、アドレスデータＡ（ｊ）が入力された場合の動作について説明する。  この時帰還レジスタ３４２には既に’１’が入力されて保持され続けているため、上記と同様にして図１４の第２番目の一致ブロックに一致が発生し、そのワード線３４３ｗがアクティブとなり、真横のメモリブロック３４５からカウンタセットフラグ３４５ａの’１’、カウンタイネーブルフラグ３４５ｂの’１’、帰還データ３４５ｃの’２’およびカウンタデータ３４５ｄの’３’が出力される。ただし、この時もセレクタ制御フラグ３４５ｆが’０’であり、あいかわらずＲＯＭ４からデータ線３０８ａを介してセレクタ３４６に入力される出力データが、データ線８より出力される。
【００９８】
ここで、カウンタセットフラグ３４５ａより作られるカウンタセット信号が’１’となるため、帰還レジスタ制御信号の立ち上りタイミングで（図１５の時刻Ｔ２）、帰還データ３４５ｃの’２’が帰還レジスタ３４２に入力され、これとともに、カウンタデータ３４５ｄの’３’がカウンタ３５２に入力される。また、カウンタイネーブルフラグ３４５ｂが’１’であるために、図１６のフリップフロップ３９４の出力は’０’となり、したがって今度はカウンタ回路３９２からの信号により帰還レジスタ３４２が制御されることになる。
【００９９】
次のアドレスが入力されると制御信号の立ち上りで、カウンタ３５２（図１４、図１５及び図１６参照）の値が１つカウントダウンされ、’２’となる（図１５の時刻Ｔ２とＴ２＋１との間）。
更に、次のアドレスデータが入力され、時刻Ｔ２＋１で帰還レジスタ制御信号が立ち上るが、この時カウンタセットフラグ３４５ａが’０’でかつカウンタ３５２からの出力が’１’であるため、帰還レジスタ３４２のフリップフロップ３９０の出力がそのまま帰還され、以前のデータを保持することになる（図１６参照）。時刻Ｔ２＋１からＴ２＋２の間の制御信号の立ち上りで、カウンタ３５２は’１’にカウントダウンされる。
【０１００】
時刻Ｔ２＋２でも同様に帰還レジスタ制御信号が立ち上るが、この時もカウンタ３５２の値は’１’であって、カウンタセットフラグ３４５ａは’０’であるので、やはり以前のデータが保持される。次に、時刻Ｔ２＋２からＴ３の間の制御信号の立ち上りで、カウンタ３５２は’０’にカウントダウンされ、カウンタ３５２からの帰還レジスタ３４２への出力が’０’となるが、この時のアドレスデータが期待値のＡ（ｋ）になっており、カウンタセット信号の立ち上りでカウンタデータ３４５ｄ’１’及びカウンタイネーブルフラグ３４５ｂ’１’がセットされる。また、この時、セレクタ制御フラグ３４５ｆが’１’であるので、出力データ３４５ｄのＤ（ｋ）がＲＯＭ４からの出力データＢＲＢＡＫ１に代わって、セレクタ３４５を介してデータ線８より出力される。また、帰還データ３４５ｃの’３’は、時刻Ｔ３の帰還レジスタ制御信号の立ち上りで帰還レジスタ３４２に入力保持される。
【０１０１】
更に、時刻Ｔ３と時間Ｔ４との間の制御信号の立ち上りのタイミング、カウンタ３５２が’０’にカウントダウンされ、セレクタ制御フラグ３４５ｆが’１’であるので、やはり、ＲＯＭ４からの出力データＢＲＥＡＫ２に代わってデータＤ（ｍ）がセレクタ３４６を介して、データフロー制御装置１０より出力される。
【０１０２】
次に、時刻Ｔ４の帰還レジスタ制御信号の立ち上りでは、カウンタ３５２からの出力が’０’であるので、帰還データ３４５ｃの値’０’が帰還レジスタ３４２に入力され保持される。
また、カウンタ３５２およびカウンタイネーブルフラグ３４５ｂのフリップフロップ３９４は、カウンタセットフラグ３４５ａが’０’なので、それまでの’０’の状態を保つことになる。
【０１０３】
以上が動作概要であるが、２つの入力期待アドレスデータの距離ｎ（整数）を決めるものはカウンタ３５２であるが、このｎ番目以内に期待アドレスデータが入力されたときも、図１６の帰還レジスタ３４２の入力データ制御回路３９１を構成する、帰還データ３４５ｃ入力を制御する回路が、カウンタ３５２の出力と、カウンタセットフラグ３４５ａの論理和を演算するオア回路３９１ｂであるために、期待するアドレスデータがこのｎ番目以内に入力されれば、ちょうどｎ番目に入力された場合と同様となる。逆に、ｎ＋１番目以降に入力された場合は、カウンタ３５２の出力が’０’になった後の、期待アドレスデータが入力されていない帰還データ、即ち’０’が帰還レジスタ３４２に入力されることになる。
【０１０４】
このように、その時点に入力されているアドレスだけで出力データを決定するのではなく、特定のアドレスに対しては、その前に入力されたソフトウェア実行時のアドレス系列およびその距離によってその出力を決めることにより、不正なアドレス動作におけるコピーが防止されるのである。
また、この例に示すように、例えばアドレスデータＡ（ｎ）等の後に期待されていないどんなアドレスデータが１つもしくは複数個来ても、常に次にキーとなるものを待つことが出来る構成となっているために、近年の処理高速化のためのＣＰＵのプリフェッチ動作による、ソフトウェアの処理手順を考慮しない連続したアドレスによるデータの先き読みに対しても誤動作することなく、適切なキーデータの抽出と、正規データの出力が可能となる。
【０１０５】
尚、図４に示す第３実施例における一致検出部３４１の一致ブロック３４３、およびメモリ部３４４のメモリブロック３４５の具体的回路は特に限定されるものではないが、例えば、前述した第２実施例で示した具体的回路と同様に構成することができる（図１０（ａ），（ｂ）、図１１、図１２（ａ），（ｂ）参照）。
【０１０６】
次に、本発明のデータフロー制御装置の第４実施例について説明する。
まず、ＲＯＭ４の中には、図１７（ａ）に示す如く、各アドレスＡに従って図示の各データＤが格納されており、データフロー制御装置１０にも同図（ｂ）のデータが格納されている。ＲＯＭ４には、アドレス線７からデータフロー制御装置１０を介してアドレスデータが入力される。また、同様にＲＯＭ４からの出力データは、データフロー制御装置１０を介してデータ線８に出力される。もちろん、このアドレス線７の全部又は一部、又はデータ線８の一部が直接ＲＯＭ４に接続されても良い。
【０１０７】
次に、実際のソフトウェア実行時の動作の例について説明する。
特に、本実施例は、複数のデータを同一のアドレスに対応づけるという、「アドレスの多重化」という点から述べることにする。
まず、あるソフトウェア処理の時は、アドレスがＡ（ｊ）→Ａ（ｊ＋２）→Ａ（ｋ）→Ａ（ｋ＋１）とアクセスされるとする。このアクセスの手順と示したものが、図１８（ａ）の添付番号（１）から（４）である。このときは、通常のＲＯＭ４から各アドレスに対応したデータが出力されることになる。
【０１０８】
ここで仮に、アドレスＡ（ｊ）のデータは、条件ジャンプの判定部に相当するものであるとし、上述の第１のケースはジャンプが発生しなかった場合であるとする。
一方、図１８（ｂ）の場合は、条件ジャンプが発生する場合のアドレスアクセスの順番を示す第２のケースであり、Ａ（ｊ）→Ａ（ｊ＋１）→Ａ（ｍ）→Ａ（ｍ＋１）→Ａ（ｋ）→Ａ（ｋ＋１）となる。
【０１０９】
ここで、第１のケース（図１８（ａ））では、アドレスＡ（ｋ），Ａ（ｋ＋１）にはそれぞれデータ（ｋ，１），Ｄ（ｋ＋１，１）が対応しており、第２のケース（図１８（ｂ））では同じアドレスＡ（ｋ），Ａ（ｋ＋１）に第１のケースとは異なるデータＤ（ｋ，２），Ｄ（ｋ＋１，２）が対応している。そこで第２のケースにおけるアドレスＡ（ｋ），Ａ（ｋ＋１）に対応するデータＤ（ｋ，２），Ｄ（ｋ＋１，２）はデータフロー制御装置１０に格納しておき、第２のケースの場合における順番、すなわち、上述した、Ａ（ｊ）→Ａ（ｊ＋１）→Ａ（ｍ）→Ａ（ｍ＋１）→Ａ（ｋ）→Ａ（ｋ＋１）の順番でアクセスされた時に、アドレスＡ（ｋ），Ａ（ｋ＋１）に対応して、ＲＯＭ４の内容ではなく、データフロー制御装置１０のデータを出力することとするわけである。
【０１１０】
ここでは、この第２のケースのアドレスのうち、特に｛Ａ（ｊ），Ａ（ｍ），Ａ（ｋ），Ａ（ｋ＋１）｝のアドレスの出現順とその各アドレスの距離に着目する。ここで「距離」とは、着目しているある１つのアドレスデータが入力され、その後いくつのアドレスデータが入力された後もう１つの着目しているアドレスデータが入力されたかを表している。ここでは、アドレスデータＡ（ｊ）が入力されてから次にアドレスデータＡ（ｍ）が入力されるまでの距離は無制限であるとする。即ち、アドレスデータＡ（ｊ）が入力されたすぐ次にアドレスデータ（ｍ）が入力されてもよく、アドレスデータＡ（ｊ）が入力され、その後他のアドレスデータがいくつ入力された後にアドレスデータＡ（ｍ）が入力されてもよいものとする。またアドレスデータＡ（ｍ）とアドレスデータＡ（ｋ）に関しては、その間の距離は３、すなわち、アドレスデータＡ（ｍ）とアドレスデータＡ（ｋ）との間に他のアドレスデータが最大２つまで入り込むことを許容するものとする。さらに、アドレスデータＡ（ｋ）とアドレスデータＡ（ｋ＋１）に関しては、その距離は１，即ち、アドレスデータＡ（ｋ）とアドレスデータＡ（ｋ＋１）との間に他のアドレスデータが入り込んではならないものとする。
【０１１１】
上記の配列の順序で各アドレスデータが入力され、かつ各アドレスデータ間の距離が満たされる時に、データフロー制御装置１０の内部に格納されたデータＤ（ｋ，２），Ｄ（ｋ＋１，２）が各々アドレスデータＡ（ｋ）とＡ（ｋ＋１）の入力に応答して出力されるよう定義しておく。一方ＲＯＭ４には、各アドレスＡ（ｋ），Ａ（ｋ＋１）には、上述したもう一方の分岐側のプログラムデータＤ（ｋ，１）とＤ（ｋ＋１，１）が各々定義されている。
【０１１２】
このように、本実施例においても、実際のソフトウェアが動作するときに存在するアドレスの不連続性と、一連の処理のためには複数のアドレスからのデータが必要であるというアドレスの関連性の２点に着目している。この点から、特定のアドレスの出力データを、最新あるいはそのときに入力されたアドレスデータのみだけでなく、それ以前に入力されたアドレスデータとも関連づけ、それらの複数のアドレスデータの組合わせをキーデータとして、そのキーデータに対応するデータをデータフロー制御装置１０に格納しておき、一方通常のＲＯＭ４の中には、別のソフトウェアフローのデータを入れてアドレスを多重化しておく。こうすることで、ソフトウェアの処理手順を全て知る開発者でない限り、多重化されたアドレス番地やそのデータ内容を知ることができない。また何が多重化アドレスに対応したキーデータなのかもわからないものとしている。
また、この実施例では、データＤ（ｋ，２）のキーデータとしてアドレスデータＡ（ｊ），Ａ（ｍ）および自らのアドレスＡ（ｋ）の３つのアドレスデータ、およびデータＤ（ｋ＋１，２）のキーデータとしてアドレスデータＡ（ｊ），Ａ（ｍ），Ａ（ｋ）および自らのアドレスデータＡ（ｋ＋１）の４つのアドレスデータの中での順番と各アドレス間の距離（距離無制限を含む）が定義されており、これら３つないし４つのアドレスデータの発生順序とその距離によりアドレス多重化されたデータＤ（ｋ，２），Ｄ（ｋ＋１，２）を各々アドレスデータＡ（ｋ），Ａ（ｋ＋１）の入力に対応させて出力している。もちろんこの例に示した３つないし４つのアドレスデータの配列に限らず、一連の処理を行うためにアクセスされる複数のアドレスの中から任意の個数、任意の場所のものを選び、アドレス多重化を行い、ある処理のデータをＲＯＭ４に格納しておくとともに、他の処理のデータとそのキーデータをデータフロー制御装置１０に格納しておくことが可能である。またここでは、アドレスの距離に関しても、ある設定範囲以内であればよく、これにより設定の容易化が図られている。このアドレス多重化率を上げたり、各処理のデータに対応する、キーデータとして定義されるアドレスデータの数をいろいろと変化させたり、キーデータの数を増やすことによって多重化されたデータの数を増加させることで、違法なコピーを更に困難にすることができる。
【０１１３】
このように、本発明は、前述した第１〜第３実施例で説明したような、正規のフローで読み出されない場合にシステムダウン等の誤動作を生じさせる誤ったデータという観点の他、この第４実施例に示すようにアドレスの多重化という観点からも構成することができる。
アドレスの多重化という観点から本発明を構成した場合も、ＲＯＭ４ないしデータフロー制御装置１０に記憶しておくデータが異なるのみであって、データフロー制御装置１０の具体的なハードウェアは、前述した第１〜第３実施例の構成（図４，図８，図１４参照）をそのまま採用することができる。
【０１１４】
ここでは、配列を構成するアドレスデータどうしの間にその配列を構成しないアドレスデータの嵌入を許容し、かつ配列を構成するアドレスデータどうしの間に距離の概念を導入した場合について、回路構成としては前述した第３実施例の場合（図１４参照）と重複するが、アドレスの多重化という観点からその回路構成の一例について図１９のブロック図および図２０のタイミングチャート図を用いて説明する。
【０１１５】
まず、図１９に示すアドレス線７を介してアドレス信号が一致検出部３４１に入力される。同時に帰還レジスタ３４２のデータ出力信号がこの一致検出部３４１に入力され、このデータ出力信号とアドレス信号の両方に一致する一致ブロック３４３のワード線３４３ｗがアクティブとなる。これによりその真横のメモリブロック４５が選択される。
【０１１６】
各メモリブロック３４５は、カウンタセットフラグ３４５ａ、カウンタイネーブルフラグ３４５ｂ、帰還データ３４５ｃ、カウンタデータ３４５ｄ、出力データ３４５ｅ、およびセレクタ制御フラグ３４５ｆより成っている。また一致ブロック３４３は、アドレスデータ一致部３４３ａおよび帰還データ一致部３４３ｂより成っている。
【０１１７】
まずアドレス線７を経由してアドレスデータＡ（ｊ）が一致検出部３４１に入力される。このとき一致検出部３４１の第４番目の一致ブロック３４３のアドレスデータ一致部３４３ａにはアドレスデータＡ（ｊ）が入っている。また、その第４番目の一致ブロック３４３の帰還データ一致部３４３ｂは、ドントケア状態（どのようなデータに対しても一致したものとみなす状態）に設定されている。この結果、第４番目の一致ブロック３４３に一致が発生し、そのワード線３４３ｗがアクティブとなり、同図真横の第４番目のメモリブロック３４５が選択され、その格納データが各々出力される。この格納データのセレクタ制御フラグ３４５ｆは‘０’であるため、セレクタ４６は、データ線１０８ａを経由して入力されたＲＯＭ４からの出力信号を、データ線１０８に出力する。
【０１１８】
この時、帰還レジスタ制御信号の立ち上りで（図２０の時刻Ｔ１）、帰還データ３４５ｃから読み出された値’１’が帰還レジスタ３４２に格納される。それと同時に、カウンタセットフラグ３４５ａも’１’であるので、カウンタデータ３４５ｄの’＊’がカウントセット信号（このカウントセット信号は、カウンタセットフラグ３４５ａの出力を△ｔ２遅らせた信号である）の立ち上りのタイミングでカウンタ１３４２に入力される。ここで、このカウンタデータ３４５ｄの値’＊’は、値が何であってもよいことを意味する。その値が何でもよいのは、カウンタイネーブルフラグ３４５ｂが’０’であり、このためカウンタ１３４２の状態にかかわらず、帰還レジスタ３４２への出力信号が’１’となるためである。このため、上述した配列を構成する次のアドレスデータＡ（ｍ）が入力されるまでは、帰還レジスタ３４２の値を保持することが可能となり、キーアドレスＡ（ｊ）とＡ（ｍ）が距離に無関係なものとなる。
【０１１９】
この帰還レジスタ３４２とカウンタ３５２の具体的構成は図１６と同一であり説明は省略する。
次に、アドレスデータＡ（ｍ）が入力された場合の動作について説明する。
この時帰還レジスタ３４２には既に’１’が入力されて保持され続けているため、上記と同様にして図１９の第２番目の一致ブロックに一致が発生し、そのワード線３４３ｗがアクティブとなり、真横のメモリブロック３４５からカウンタセットフラグ３４５ａの’１’、カウンタイネーブルフラグ３４５ｂの’１’、帰還データ３４５ｃの’２’およびカウンタデータ３４５ｄの’３’が出力される。ただし、この時もセレクタ制御フラグ３４５ｆが’０’であり、あいかわらずＲＯＭ４からデータ線３０８ａを介してセレクタ３４６に入力される出力データが、データ線８より出力される。
【０１２０】
ここで、カウンタセットフラグ３４５ａより作られるカウンタセット信号が’１’となるため、帰還レジスタ制御信号の立ち上りのタイミングで（図２０の時刻Ｔ２）、帰還データ３４５ｃの’２’が帰還レジスタ３４２に入力され、これとともに、カウンタデータ３４５ｄの’３’がカウンタ回路３９２に入力される。また、カウンタイネーブルフラグ３４５ｂが’１’であるために、図１６のフリップフロップ３９４の出力は’０’となり、したがって今度はカウンタ回路３９２からの信号により帰還レジスタ３４２が制御されることになる。
【０１２１】
アドレスデータＡ（ｍ）に続く次のアドレスデータが入力されると、制御信号の立ち上りで、カウンタ回路３９２（図１９、図２０及び図１６参照）の値が１つカウントダウンされ、’２’となる（図２０の時刻Ｔ２とＴ３との間）。この時カウンタセットフラグ３４５ａが’０’でかつカウンタ３５２からの出力が’１’であるため、帰還レジスタ３４２のフリップフロップ３９０の出力がそのまま帰還され、以前のデータを保持することになる（図１６参照）。
【０１２２】
更に、時刻Ｔ３において次のアドレスデータが入力され、これにより帰還レジスタ制御信号が立ち上るが、この時もカウンタ３５２の値は’２’であって、カウンタセットフラグ３４５ａは’０’であるので、やはり以前のデータが保持される。その直後の制御信号の立ち上りで、カウンタ３５２は’１’にカウントダウンされるが、この時のアドレスデータが期待値のＡ（ｋ）になっており、カウンタセット信号の立ち上りでカウンタデータ３４５ｄ’１’があらためてカウンタ回路３９２にセットされ、及びカウンタイネーブルフラグ３４５ｂ’１’が反転されてフリップフロップ３９４にセットされる。また、この時、セレクタ制御フラグ３４５ｆが’１’であるので、出力データ３４５ｅのＤ（ｋ，２）が、ＲＯＭ４からの出力データＤ（ｋ，１）に代わって、セレクタ３４６を介してデータ線８より出力される。また、帰還データ３４５ｃの’３’は、時刻Ｔ４の帰還レジスタ制御信号の立ち上りで帰還レジスタ３４２に入力保持される。
【０１２３】
更に、アドレスデータＡ（ｋ＋１）が入力され、時刻Ｔ４と時間Ｔ５との間の制御信号の立ち上りのタイミングでカウンタ回路３９２が’０’にカウントダウンされ、Ｎ番目の一致ブロック３４３の真横のメモリブロック３４５の内容が読み出され、セレクタ制御フラグ３４５ｆが’１’であるので、やはり、ＲＯＭ４からの出力データＤ（ｋ＋１，１）に代わってデータＤ（ｋ＋１，２）がセレクタ３４６を介して、データフロー制御装置１０より出力される。
【０１２４】
次に、時刻Ｔ５の帰還レジスタ制御信号の立ち上りでは、カウンタ３５２からの出力が’０’であるので、帰還データ３４５ｃの値’０’が帰還レジスタ３４２に入力され保持される。
また、カウンタ回路３９２およびフリップフロップ３９４は、カウンタセットフラグ３４５ａが’０’なので、それまでの’０’の状態を保つことになる。
【０１２５】
以上が動作概要である。２つの入力期待アドレスデータの距離ｎ（整数）を決めるものはカウンタ３５２であるが、図１６の帰還レジスタ３４２の入力データ制御回路３９１を構成する、帰還データ３４５ｃの入力を制御する回路が、カウンタ３５２の出力と、カウンタセットフラグ３４５ａとの論理和を演算するオア回路３９１ｂであるために、期待するアドレスデータがこの距離ｎよりも近距離で入力された場合も、ちょうど距離ｎで入力された場合と同様となる。逆に、ｎ＋１番目以降に入力された場合は、カウンタ３５２の出力が’０’になった後の、期待アドレスデータが入力されていない帰還データ、即ち’０’が帰還レジスタ３４２に入力されることになる。
【０１２６】
このように、その時点に入力されているアドレスだけで出力データを決定するのではなく、特定のアドレスに対しては、その前に入力されたソフトウェア実行時のアドレス系列およびその距離によってその出力を決めることにより、不正なアドレス動作におけるコピーが防止されるのである。
また、この例では、前述した第３実施例と同様、例えばアドレスデータＡ（ｊ）等の後に期待されていないどんなアドレスデータが１つもしくは複数個来ても、常に次にキーとなるものを待つことが出来る構成となっているために、近年の処理高速化のためのＣＰＵのプリフェッチ動作による、ソフトウェアの処理手順を考慮しない連続したアドレスによるデータの先読みに対しても誤動作することなく、適切なキーデータの抽出と、正規データの出力が可能となる。
【０１２７】
以下、本発明のデータフロー制御装置ないしメモリ装置に不正コピー防止用として組み込むことのできる、プログラム上の具体的な場面についてゲーム用のプログラムを念頭に置いて紹介する。
図２１は、ジャンプ命令を含むプログラムの格納アドレスとニーモニックを示す図である。
【０１２８】
アドレス′９０００′に格納された′ＢＥＱ  ９０１３′は、あるステータスレジスタのあるビットが′０′であれば′９０１３′番地へジャンプし、そうでなければアドレス順に従った次の命令を実行することを表わす命令である。アドレス′９０１０′に格納された′ＪＭＰ  ａ０００′は、無条件に′ａ０００′番地にジャンプすることを表わす命令、アドレス′９０２０′に格納された′ＢＮＥ  ９０１３′は、あるステータスレジスタのあるビットが′０′でなければ、′９０１３′番地へジャンプし、′０′であればアドレス順に従った次の命令を実行することを表わす命令である。
【０１２９】
このプログラムフローでは、アドレス′９０１３′へは、アドレス′９０００′又は′９０２０′からジャンプしてくるパスはあるが、その直前のアドレスからのパスはない。この場合、′…，９０００，９０１３，…′ないし′…，９２００，９０１３，…′をアドレスデータの配列（キーデータ）として採用することで、その配列順にアクセスされた場合のみ、正しい命令（データ）が出力されるように構成することができる。
【０１３０】
ここでは、キーデータとして予め登録されたアドレス順（ないしアドレス順と距離）に従ってアクセスされた場合にのみ、アドレス’９０１３’に格納されたデータとして、例えばアキュームレータに値’００’を格納することを意味する命令’ＬＤＡ  ＃００’が出力され、ゲームは正常に動作し、ゲーム作成者が意図した最も面白いプレーを行うことができる。一方、登録されたキーデータに違反したアクセスを行った場合には、アドレス’９０１３’のデータとして、例えばアキュームレータに値’３３’を格納することを意味する命令’ＬＤＡ  ＃３３’が出力され、その後のゲーム動作が異常になったり、そのゲームの面白さが低減される結果となる。この例の特徴は、命令は同一であって、オペランドのみが異なることである。このようなコピー防止策は、作成が容易であり、一方、誤り箇所はどこか、正しいオペランド値は何か等の解析は困難であり、したがって不正コピーは困難である。
【０１３１】
図２２は、サブルーチンコール命令およびサブルーチンからのリターン命令を含むプログラムの格納アドレスとニーモニックを示す図である。
アドレス′９０００′，′９１００′に格納された′ＪＳＲ  ９２０１′は、アドレス′９２０１′から始まるサブルーチンを実行することを指示するサブルーチンコール命令であり、アドレス′９３００′に格納された′ＲＴＳ′はそのサブルーチンからのリターンを指示するリターン命令である。尚、アドレス′９２００′に格納された’ＲＴＳ’は別のサブルーチンのリターンを指示する命令を表わす。
【０１３２】
このプログラムフローでは、アドレス′９２０１′（サブルーチンのエントリ・ポイント）へは、アドレス′９０００′又はアドレス′９１００′からのパスはあるが、直前のアドレスからのパスはない。すなわちアドレス′９２００′と′９２０１′との間にプログラム・フロー上のアドレスの不連続が存在する。したがって、′…，９０００，９２０１，…′、ないし′…，９１００，９２０１，…′等をアドレスデータの配列とすることで、その配列順にアクセスされた場合のみ正しい命令（データ）が出力されるように構成することができる。
【０１３３】
また、このプログラムフローでは、アドレス′９００３′あるいはアドレス′９１０３′（サブルーチンコール命令の直後のポイント）へは、アドレス′９３００′からくるパスはあるが、アドレス′９０００′ないし′９１００′からのパスはない。すなわち、アドレス′９０００′と′９００３′との間、およびアドレス′９１００′と′９１０３′との間にはプログラムフロー上のアドレスの不連続が存在する。したがって、′…，９３００，９００３，…′ないし′…，９３００，９１０３，…′等をアドレスデータの配列とすることで、その配列順にアクセスされた場合のみ正しい命令（データ）が出力されるように構成することができる。
【０１３４】
ここでは、キーデータとして予め登録されたアドレス順（ないしアドレス順と距離）に従ってアクセスされた場合にのみ、アドレス’９２１０’のデータとして、例えば、アキュームレータ値に’００’を格納することを意味する命令’ＬＤＡ  ＃００’が出力されゲームが正常に続行される。一方登録されたキーデータに違反したアクセスを行った場合には、アドレス’９２１０’のデータとして、例えばサブルーチンからのリターン命令’ＲＴＳ’が出力され、サブルーチン処理が途中で終了してリターンし、その後のゲームの動作が異常となる。一般的に、１つのサブルーチンでもリターン命令は複数存在することはまれではなく、従って不正コピーされたデータ中、アドレス’９２１０’に、リターン命令’ＲＴＳ’が存在していても何ら奇異には感じられない。したがってこの場合も、コピーデータの解析は困難である。一方、このようなコピー防止策も、作成は容易である。
【０１３５】
図２３は、割込みあるいはリセットが入力されたときのプログラムのスタート・ポイントを指示する命令を含むプログラムの格納アドレスとニーモニックを示す図である。
アドレス′ｆｆｆｅ′，′ｆｆｆｃ′に格納された、′ｄｗ  ｉｒｑ＿ｉｎｔ′，′ｄｗ  ｓｔａｒｔ′は、それぞれ割込み入力時、リセット時に実行されるプログラムがそれぞれｉｒｑ＿ｉｎｔ（アドレス′８１００′），ｓｔａｒｔ（アドレス′８０００′）であることを指示している。
【０１３６】
このプログラムでは、リセット時のスタート・ポイント′８０００′へは、そのアドレス値が格納されているアドレス′ｆｆｆｃ′からくるパスはあるが、直前のアドレスからのパスはない。すなわち、アドレス′８０００′とその直前のアドレス′７ｆｆｆ′との間にはプログラム・フロー上のアドレスの不連続が存在する。
【０１３７】
したがって、′ｆｆｆｃ，８０００，…′をアドレスデータの配列とすることで、その配列順にアクセスされた場合のみ正しい命令（データ）が出力されるように構成することができる。割込みの場合も同様である。
ここでは、キーデータとして予め登録されたアドレス順（ないしアドレス順と距離）に従ってアクセスされた場合にのみ、アドレス’８０００’ないしアドレス’８１００’のデータとして、例えばメモリ中の、メモリアドレス’２０００’の内容をゼロクリアする命令’ＳＴＺ  ２０００’が出力される。一方、登録されたキーデータに違反したアクセスが行われると、アドレス’８０００’ないしアドレス’８１００’のデータとして、メモリ中の別のメモリアドレス’２０１０’の内容をゼロクリアする命令’ＳＴＺ  ２０１０’が出力され、その後のゲーム動作が異常となる。
【０１３８】
一般的に、プログラム始動直後では、メモリ空間を初期化することが多い。したがって、この例に示すように初期化すべきメモリ領域や初期値を異なったものにすると、異なった動作が行われ、その一方を正常の動作、他方を誤った動作ないし面白くも何ともないゲーム動作を行うようにすることもできる。このような場合、不正コピーしたデータのどこがどのように誤っているのかの解析は困難である。逆に、そのようなコピー防止策は簡単に作成することができる。
【０１３９】
図２４は、データフェッチ命令を含むプログラムの格納アドレスとニーモニックを示す図である。
アドレス′９０００′に格納された′ＬＤＡ  ［１０］，Ｙ′は、ダイレクト・レジスタの値に′１０′を加え、さらにＹレジスタの値を加えてできたアドレスに格納されているデータをロードすることを示す命令である。例えばアドレス′９０００′に到った時点で、ダイレクト・レジスタに′ａ０００′が格納されており、Ｙレジスタに１００′が格納されていた場合、それらを加えたアドレスは′ａ１１０′となる。したがってこのプログラムフローでは、アドレス′９０００′，′９００１′の次に、アドレス′ａ１１０′が現われる。すなわち、アドレス′ａ１１０′とその直前のアドレス′ａ１０ｆ′の間には、プログラム・フロー上の不連続が存在する。したがって、′…，９０００，ａ１１０′等をアドレスデータの配列とすることで、その配列順にアクセスされた場合のみ正しい命令（データ）が出力されるように構成することができる。
【０１４０】
この場合、登録されたキーデータに沿ったアクセスが行われたか否かに応じて、アドレス’ａ１１０’のデータとして、それぞれ、例えば正しい値’８０’、誤った値’ｆｆ’が出力される。命令コード領域とは異なり、データ領域にはいかなる値のデータが存在していても何ら不自然ではなく、したがってこの場合、アドレス’ａ１１０’から読まれたデータの値が誤っているか否かの判断は極めて困難である。
【０１４１】
図２５（ａ）は、サブルーチンコール命令と分岐命令とを含むプログラムの格納アドレスとニーモニックを示す図であり、図２５（ｂ），（ｃ）はデータフロー制御装置１０の中に格納された誤ったデータを示す図である。
キーデータとして、例えば’９０００，９２０２’と’９０００，９２０２，９２１０，９２１８’の、一部が重複した２つの配列を登録しておく。’ＬＤＡ’は２バイト命令であり、この登録されたキーデータに従うアクセスが行なわれた場合には、アドレス’９２０２’，’９２１８’に格納された値として、図２５（ａ）に示すような正しいデータ＃００，＃００が出力される。一方、もしアドレス’９２０２’が登録キーデータに反する現れ方をしたら、図２５（ｂ），（ｃ）に示すような誤ったデータ＃ｆｆ，＃８８が出力される。もし、仮に、アドレス’９２０２’に関しては登録キーデータに従う現れ方をしたとしても、アドレス’９２１８’が登録キーデータに反する現れ方をすると、アドレス’９２１８’に関し図２５（ｃ）に示すような誤ったデータ＃８８が出力される。
【０１４２】
この例に示すように、配列要素の一部が重複する複数の配列（キーデータ）を登録しておくことにより、それらのキーデータからなる複数のプロテクトのうちの一部が破られた（正しくコピーされてしまった）としても、それに引き続いてさらにもう１つ別のプロテクトが存在することになり、何が正しいプログラムかという解析とコピーの困難さが増すことになる。
【０１４３】
次にアドレスの多重化という観点について、説明する。
図２６はアドレス′９０００′とアドレス′９０ｆｆ′との間に命令が多重に配列されているプログラム・フローを示す図である。
アドレス′９０ｆｄ′〜９０ｆｆ′の３バイトに格納された′ＪＭＰ  ９０００′は無条件にアドレス′９０００′へ分岐する命令を表わしており、アドレスデータの配列として、例えば、′…，９０００′…，９０ｆｄ，９０００，…，９０ｆｄ，９０００，…，９０ｆｄ，９０００，…，９０ｆｄ，…′を採用することで、図２６に示すように、アドレス′９０００′とアドレス′９０ｆｆ′との間に命令を多重に配列することができる。この場合、アドレス順に単純に読み出すと、それら多重に配列されたうちの最初の１つのみしか読み出されず、その読み出したプログラムを実行させても正常には動作しない。
【０１４４】
この例では、アドレス’９０００’〜アドレス’９０ｆｄ’が繰り返し４重にも使われている。
’ＬＤＡ’は２バイト命令であり、１回目、２回目、３回目、４回目の各アドレス′９０００′，′９００１′には、それぞれ、例えば’ＬＤＡ  ＃００’，’ＬＤＡ  ＃２ａ’，’ＬＤＡ  ＃０ｆ’，’ＬＤＡ  ＃ｅｅ’が定義されている。この場合、アドレス′９００１′のデータとして、その場合に応じて異なる値がアキュムレータに入力される。キーデータに従わないアクセスの場合は、アドレス′９０００′の１回目のデータ’ＬＤＡ  ＃００’のみ出力される。この場合も解析は極めて困難である。
【０１４５】
図２７は、命令が多重に配列された、図２６に示すプログラム・フローよりも複雑なプログラム・フローを示す図である。
アドレスデータの配列として、例えば、′…，９０００，…，９０１ｄ，９０２０，…，９０３ｄ，９０４０，…，９０５ｄ，９０２０，…，９０３ｄ，９０００，…，９０１ｄ，９０４０，…，９０５ｄ，…′等を採用することにより図２７に示す多重化が実現する。
【０１４６】
図２８は、プログラム・フローの他の例を示す図である。
ＢＥＱ，ＢＮＥ，ＢＣＣは、いずれも分岐命令を示すニーモニックである。
アドレスデータの配列（キーデータ）として、例えば、′…，９０００，９０３０，…′，′…，９０１０，９０３０，…′，′…，９０２０，９０３０，…′等を採用することにより図２８（ａ）に示す多重化が実現する。
【０１４７】
図２８（ｂ）〜（ｅ）は、図２８（ａ）の破線ブロックの内部の例を示す図である。’ＪＳＲ’はサブルーチンコール命令、’ＢＲＡ’は無条件分岐命令である。図２８（ｂ），（ｃ），（ｄ），（ｅ）は、それぞれ１つのサブルーチンのコール、５つのサブルーチンコール、３つのサブルーチンコール、コールするサブルーチンが存在しないことを示している。即ちこの例では、どの登録キーデータに従うアクセスであるかによってコールするサブルーチンが異なる。いかなる場面でいかなるサブルーチンをコールすれば正しくゲームをプレイすることができるかを解析することは極めて困難であり、したがって正確なコピーは困難である。
【０１４８】
図２９（ａ）は、プログラム・フローのもう１つの例を示す図である。
アドレスデータの配列として、例えば、′…，９０００，９０３０，…，９３ｆｆ，…′，′…，９０１０，９０３０，…，９３ｆｆ，…′，′…，９０２０，９０３０，…，９３ｆｆ，…′，′…，９０２ｆ，９０３０，…，９３ｆｆ，…′等を採用することにより図２９（ａ）に示す多重化が実現する。
【０１４９】
図２９（ｂ）〜（ｅ）は、図２９（ａ）の破線ブロックの内部の例を示す図である。
’ＳＴＡ’はアキュームレータに格納されたデータをメモリにストアする命令、’ＢＮＥ’は条件付き分岐命令、’ＣＭＰ’は比較命令、’ＳＴＺ’はメモリをゼロにするクリアする命令、’ＬＤＹ’はＹレジスタに値をロードする命令を表わす。
【０１５０】
この例では、アドレス’９０３０’以降の領域に複数のパターンのデータが存在し、どの登録キーデータに従ったアクセスであるかによって、全く異なる処理が実行される。いかなる場合にいかなる処理を実行すればゲームを正しくプレイすることができるかを解析することは困難であり、従ってコピーは困難である。図３０，図３１はサブルーチンコール命令（ＪＳＲ）を含むプログラム・フローの例である。
【０１５１】
図２８，図２９に示す分岐命令以外に、サブルーチンコール命令を用いた場合も同様に、アドレスデータの配列が定義される。
図３２は、サブルーチンコール命令と分岐命令を含むプログラムの格納アドレスとニーモニックを示す図である。
ここでは、キーデータ（アドレスデータの配列）として、例えば、’９０００，９３００，…，９７００，…’，’９１００，９３００，…，９５００，…’，’９２００，９３００，…，９５００，…’，’９２ｆｆ，９３００，…，９４００，…’が登録される。
【０１５２】
この例では、アドレス領域’９３００’〜’９３ｆｆ’が多重化されており、どこからコールされるかによって異なるデータが出力される。又、アドレス領域’９５００’〜’９５ｆｆ’も多重化されており、どこから分岐してくるかによって、異なるデータが出力される。アドレスを順次インクリメントしてコピーを行おうとすると、’９３ｆｆ，９３００，…，９４００，…’の登録キーデータに従ってアクセスされるので、アドレス領域’９３００’〜’９３ｆｆ’では図中のブロックａのデータ、アドレス領域’９５００’〜’９５ｆｆ’では図中のブロックｅのデータのみが出力される。
【０１５３】
このように多重化領域が複数存在すると、解析とコピーはほとんど不可能である。
【０１５４】
【発明の効果】
上述したように、本発明はソフトウェアの実際の処理フローを利用して、特定のアドレスにはダミーのデータを格納しておくとともに、その特定のアドレスに対応する正規のデータを、ソフトウェアの実際のフローを知る開発者のみが知ることのできる複数のアドレスデータの組合せに対応して格納しておき、その組合せが与えられたときにのみ正規のデータを出力するように構成されているため、違法なコピーを防止することが可能となる。
【０１５５】
また、本発明においては、配列を構成するデータの間にその配列を構成しないデータの嵌入を許容することもでき、さらに配列を構成するデータどうしの距離を定義することもできる。これらの場合、本発明は、例えばプリフェッチ動作等、ソフトウェアの処理手順を無視したようなハードウェアの動作が行われるシステムにも適合したものとなる。
【０１５６】
また、本発明はソフトウェアの実際の処理フローを利用して、異なる処理フローにおける各特定の処理に同一アドレスを与えるアドレスの多重化を行い、それら同一のアドレスが与えられた特定の処理のうちの一方を、ソフトウェアの実際のフローを知る開発者のみが知ることのできる複数のアドレスデータの処理手順をキーデータとして格納しておき、その配列が所定の距離もしくはそれ以内に与えられたときのみにその一方に対応する特定処理のデータを出力するように構成することもでき、この場合も、違法なコピーを防止することが可能となる。
【０１５７】
本発明を採用すると、ソフトウェアが格納されたカセットの外部端子やカセット以外の本体システムに何の変更も加えることなくコピー防止が可能となるため、従来の本体システムにもそのまま適合し、工業上の利用価値は極めて高い。
もちろん、前述したように、データフロー制御装置をソフトウェア格納用のＲＯＭの中に組み込んで使用しても良いことはいうまでもない。
【０１５８】
更に、本発明を他のセキュリティーシステムに使用することも可能であり、ＣＤ−ＲＯＭ等を用いたゲームシステムにも同様のデータフロー制御装置を使用することも可能であり、本発明の利用範囲は極めて広い。
【図面の簡単な説明】
【図１】本発明の一実施例を採用した制御システムの全体構成を示すブロック図である。
【図２】ＲＯＭ内部のデータ格納図である。
【図３】アドレス入力に対するデータ出力のフローチャートである。
【図４】本発明のデータフロー制御装置の第１実施例の概略回路図である。
【図５】図４に示すデータフロー制御装置のタイミングチャートである。
【図６】ＲＯＭ内部のデータ格納図である。
【図７】アドレス入力に対するデータ出力のフローチャートである。
【図８】本発明のデータフロー制御装置の第２実施例の概略回路図である。
【図９】図８に示すデータフロー制御装置のタイミングチャートである。
【図１０】図８に示すデータフロー制御装置の一致検出部の一致ブロックの各回路例を表わした図である。
【図１１】図８に示すデータフロー制御装置の一致検出部の一致ブロックをＳＲＡＭを用いて構成した回路例を表わした図である。
【図１２】図８に示すデータフロー制御装置のメモリ部のメモリブロックの各回路例を表わした図である。
【図１３】アドレス入力に対するデータのフローチャートである。
【図１４】本発明のデータフロー制御装置の第３の実施例の概略回路図である。
【図１５】図１４に示すデータフロー制御装置のタイミングチャートである。
【図１６】図１４に示すデータフロー制御装置の帰還レジスタ及びカウンタの構成例を表わした図である。
【図１７】ＲＯＭおよびデータフロー制御装置内部のデータ格納図である。
【図１８】アドレス入力に対するデータ出力のフローチャートである。
【図１９】本発明のデータフロー制御装置の第４実施例の概略回路図である。
【図２０】図１９に示すデータフロー制御装置のタイミングチャートである。
【図２１】ジャンプ命令を含むプログラムの格納アドレスとニーモニックを示す図である。
【図２２】サブルーチンコール命令およびサブルーチンからのリターン命令を含むプログラムの格納アドレスとニーモニックを示す図である。
【図２３】割り込みあるいはリセットが入力されたときのプログラムのスタート・ポイントを指示するコール命令を含むプログラムの格納アドレスとニーモニックを示す図である。
【図２４】データフェッチ命令を含むプログラムの格納アドレスとニーモニックを示す図である。
【図２５】サブルーチンコール命令と分岐命令とを含むプログラムの格納アドレスとニーモニックを示す図である。
【図２６】多重化されたプログラム・プローの例を示す図である。
【図２７】多重化されたプログラム・プローの例を示す図である。
【図２８】多重化されたプログラム・プローの例を示す図である。
【図２９】多重化されたプログラム・プローの例を示す図である。
【図３０】多重化されたプログラム・プローの例を示す図である。
【図３１】多重化されたプログラム・プローの例を示す図である。
【図３２】多重化されたプログラム・プローの例を示す図である。
【図３３】従来の制御システムのブロック図である。
【図３４】従来のＲＯＭ内部のデータ格納図である。
【符号の説明】
４    ＲＯＭ
７    アドレス線
８，８ａ，８ｂ    データ線
９    カセット
１０    データフロー制御装置
４２ａ，４３ａ    ＲＯＭからの出力データ線
４２ｂ，４３ｂ    データフロー制御装置の内部データのデータ出力線
４６    セレクタ
４７    シフトレジスタ
２４１  一致検出部
２４２    帰還レジスタ
２４３    一致ブロック
２４３ａ  アドレスデータ一致部
２４３ｂ  帰還データ一致部
２４３ｗ  ワード線
２４４    メモリ部
２４５    メモリブロック
２４６    セレクタ
３０７    アドレス線
３０８    データ線
３４１    一致検出部
３４２    帰還レジスタ
３４３    一致ブロック
３４３ａ  アドレスデータ一致部
３４３ｂ  帰還データ一致部
３４３ｗ  ワード線
３４４    メモリ部
３４５    メモリブロック
３４６    セレクタ
３４９    制御回路
３５２    カウンタ
【図１】
0003566982.tif 000002
【図２】
0003566982.tif 000003
【図３】
0003566982.tif 000004
【図４】
0003566982.tif 000005
【図５】
0003566982.tif 000006
【図６】
0003566982.tif 000007
【図７】
0003566982.tif 000008
【図８】
0003566982.tif 000009
【図９】
0003566982.tif 000010
【図１０】
0003566982.tif 000011
【図１１】
0003566982.tif 000012
【図１２】
0003566982.tif 000013
【図１３】
0003566982.tif 000014
【図１４】
0003566982.tif 000015
【図１５】
0003566982.tif 000016
【図１６】
0003566982.tif 000017
【図１７】
0003566982.tif 000018
【図１８】
0003566982.tif 000019
【図１９】
0003566982.tif 000020
【図２０】
0003566982.tif 000021
【図２１】
0003566982.tif 000022
【図２２】
0003566982.tif 000023
【図２３】
0003566982.tif 000024
【図２４】
0003566982.tif 000025
【図２５】
0003566982.tif 000026
【図２６】
0003566982.tif 000027
【図２７】
0003566982.tif 000028
【図２８】
0003566982.tif 000029
【図２９】
0003566982.tif 000030
【図３０】
0003566982.tif 000031
【図３１】
0003566982.tif 000032
【図３２】
0003566982.tif 000033
【図３３】
0003566982.tif 000034
【図３４】
0003566982.tif 000035