(57)【要約】【課題】書き換え可能な不揮発性メモリに記録された命令を、正常に命令フェッチし実行できない不具合を、出荷前に検査する検査方法を提供する。【解決手段】検査対象である書き換え可能な不揮発性メモリとは異なる検査対象外のメモリに記録された検査命令へ処理を移行させる移行命令を含む検証用命令群を、検査対象の不揮発性メモリの記録領域に記録する記録ステップ（Ｓ１）と、記録ステップにおいて記録した検証用命令群の先頭の命令へ処理を移行させる移行ステップと（Ｓ５）、検証用命令群に含まれる命令が逐次処理され、移行命令により検査命令へ処理が移行した場合に、検証用命令群が正常に実行されたか否かを検証し、検証の結果が肯定的であれば、検証用命令群を記録した記録領域が正常であると見なす検証ステップ（Ｓ１１）とをコンピュータに実行させる。【選択図】    図３
2004272808.tif 000002
【特許請求の範囲】
【請求項１】
書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査プログラムであって、
前記不揮発性メモリとは異なる検査対象外のメモリに記録された検査命令へ処理を移行させる移行命令を含む検証用命令群を、前記不揮発性メモリの記録領域に記録する記録ステップと、
前記記録ステップにおいて記録した前記検証用命令群の先頭の命令へ処理を移行させる移行ステップと、
前記検証用命令群に含まれる命令が逐次処理され、前記移行命令により前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証ステップと、
をコンピュータに実行させるための不揮発性メモリ検査プログラム。
【請求項２】
前記コンピュータは、
スタックメモリと、スタックポインタとを含み、
前記検証用命令群に含まれる命令は、
正常に動作した場合に、前記スタックポインタの値を変化させ、
前記検証ステップは、
前記スタックポインタの値に基づいて、前記検証用命令群が正常に実行されたか否かを検証するスタックポインタ検証サブステップを含むこと
を特徴とする請求項１記載の不揮発性メモリ検査プログラム。
【請求項３】
前記コンピュータは、
スタックメモリと、スタックポインタとを含み、
前記移行命令は、
前記検査命令へ処理を移行させる時に、前記スタックポインタの値を変化させるリターン命令であり、
前記検証ステップは、
前記スタックポインタの値に基づいて、前記リターン命令が正常に実行されたか否かを検証するリターン命令検証サブステップを含むこと
を特徴とする請求項１記載の不揮発性メモリ検査プログラム。
【請求項４】
前記移行ステップは、
前記検査命令が記録されている記録領域の論理アドレスを、前記コンピュータガ備えるレジスタへ格納するレジスタ格納サブステップと、前記記録ステップにおいて前記検証用命令群の先頭の命令を記録した記録領域の論理アドレスを、前記コンピュータが備えるプログラムカウンタへ格納することにより、処理を移行させる移行サブステップとを含み、
前記検証用命令群は、
前記スタックポインタの値を進め、前記レジスタに格納されている論理アドレスを、前記スタックメモリへ格納するスタック格納命令を含み、
前記移行命令は、
前記スタックポインタの値を戻し、前記スタックメモリに格納されている論理アドレスへ処理を移行させるリターン命令であること
を特徴とする請求項２記載の不揮発性メモリ検査プログラム。
【請求項５】
前記コンピュータは、
スタックメモリと、スタックポインタとを含み、
前記検証用命令群は、
所定の記録領域に、所定の値を記録するメモリ操作命令を少なくとも１つ含み、
前記検証ステップは、
前記所定の記録領域に、前記所定の値が記録されているか否かを判定することにより、前記メモリ操作命令が正常に実行されたか否かを検証するメモリ検証サブステップとを含むこと
を特徴とする請求項１記載の不揮発性メモリ検査プログラム。
【請求項６】
前記コンピュータは、
スタックメモリと、スタックポインタとを含み、
前記メモリ操作命令は、
正常に動作した場合に、割り込み終了時の戻りアドレスを前記スタックメモリに格納する処理を行うソフトウェア割り込み命令であり、
前記メモリ検証サブステップは、
前記戻りアドレスが格納されていた記録領域の格納アドレスを、スタックポインタの値から算出する算出サブステップと、前記格納アドレスが指し示す記録領域に前記戻りアドレスが記録されているか否かを判定することにより、前記ソフトウェア割り込み命令が正常に実行されたか否かを検証する割り込み命令検証サブステップとを含むこと
を特徴とする請求項５記載の不揮発性メモリ検査プログラム。
【請求項７】
前記記録ステップは、
前記不揮発性メモリの連続した記録領域へ、複数組の前記検証用命令群を記録し、
前記コンピュータは、
前記複数組の検証用命令群のうちの何れか１組の検証用命令群の先頭の命令が記録された記録領域の論理アドレスを保持する保持手段を備え、
前記移行ステップは、
前記保持手段が保持する論理アドレスに記録された命令へ処理を移行させ、
当該不揮発性メモリ検査プログラムは、さらに、
前記検証ステップにおける検証結果が肯定的な場合に、前記保持手段が保持する論理アドレスを、前記検証用命令群のコードサイズ分増加させる加算ステップと、
前記検証ステップにおける検証結果が否定的な場合に、異常処理を行う異常処理ステップとを含むこと
を特徴とする請求項１記載の不揮発性メモリ検査プログラム。
【請求項８】
前記検証用命令群のコードサイズは、
１０２４以下の２の累乗バイトであり、
前記不揮発性メモリの記録容量は、
１０２４の倍数バイトであり、
前記記録ステップは、
前記複数組の検証用命令群を、前記不揮発性メモリに割り当てられた先頭アドレスから、最終アドレスまでの全ての記録領域に漏れなく記録すること
を特徴とする請求項７記載の不揮発性メモリ検査プログラム。
【請求項９】
書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査方法であって、
前記不揮発性メモリとは異なる検査対象外のメモリに記録された検査命令へ処理を移行させる移行命令を含む検証用命令群を、前記不揮発性メモリの記録領域に記録する記録ステップと、
前記記録ステップにおいて記録した前記検証用命令群を実行させる実行ステップと、
前記検証用命令群に含まれる命令が逐次実行され、前記移行命令により、前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証ステップと、
を含むことを特徴とする不揮発性メモリ検査方法。
【請求項１０】
検査対象外のメモリに記録された検査命令へ、処理を移行させる移行命令を含む検証用命令群が記録された書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査装置であって、
前記検証用命令群の先頭の命令へ処理を移行させる移行手段と、
前記検証用命令群に含まれる命令が逐次処理され、前記移行命令により、前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証手段と
を備えることを特徴とする不揮発性メモリ検査装置。
【請求項１１】
請求項１記載の不揮発性メモリ検査プログラムを、内蔵するメモリに記録したＩＣカード。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、書き換え可能な不揮発性メモリの検査技術に関し、特に、ＩＣカードに内蔵された書き換え可能な不揮発性メモリを出荷前に検査する技術に関する。
【０００２】
【従来の技術】
近年、様々な分野で利用されているＩＣカードは、書き換え可能な不揮発性メモリを備え、出荷後に当該書き換え可能な不揮発性メモリへプログラムを追加したり、記録されているプログラムを書き換えることにより、新たなサービスを受けることができるという特徴がある。
【０００３】
書き換え可能な不揮発性メモリには、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲｅａｄーＯｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、ＦＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等があるが、ＩＣカードでは、ＥＥＰＲＯＭの使用が一般的である。
【０００４】
従来のＥＥＰＲＯＭの検査方法として、工場でＩＣカードの出荷前に、ＥＥＰＲＯＭに記録されているプログラムを読出し、本来記録されるべき内容と比較して異常がないかを検査している。これにより、ＥＥＰＲＯＭにプログラムが正常に記録されていないＩＣカードが出荷されることを、未然に防ぐことができる。
ＥＥＰＲＯＭに記録されたデータを検査する先行技術が、特許文献１に開示されている。
【０００５】
【特許文献１】
特開平７−３０２２３１号公報
【０００６】
【発明が解決しようとする課題】
しかしながら、ＥＥＰＲＯＭに記録されているプログラムを読み出し、本来記録されるべき内容と比較した場合には、読み出した情報に異常が見られないにも係らず、ＩＣカードが、ＥＥＰＲＯＭの特定の記録領域に記録されている命令を、命令フェッチし実行する場合に、ＩＣカードが、記録されている命令通りに動作しないという不具合が発生することがある。
【０００７】
このような命令フェッチ時の不具合は、通常のＲＯＭでは発生しない現象であり、従来の検査方法としても、命令フェッチ時の不具合は考慮されておらず、記録されているプログラムを読出し、本来記録されるべき内容と比較する従来の検査方法では、命令フェッチ時に不具合が発生する不良品を検出できないという問題がある。
【０００８】
このため、出荷前に、従来の検査方法で検査したにもかかわらず、正常に動作しないＩＣカードが出荷後に見つかることになる。
さらに、出荷時にプログラムが記録されている領域は、ＥＥＰＲＯＭの全記録領域の一部分のみであり、命令フェッチ時に不具合が発生する記録領域は、ＥＥＰＲＯＭのどの記録領域にも存在しうるため、不具合が発生する記録領域が出荷時に未使用であった場合、出荷時にＩＣカードが正常に動作したとしても、出荷後しばらくしてから不具合が生ずることがある。例えば、ＩＣカードの出荷後に、プログラムのバージョンアップやバグの修正のために、パッチプログラムをＥＥＰＲＯＭに記録することがあるが、パッチプログラムを新たに記録した記録領域に、命令フェッチ時に不具合が発生する記録領域が含まれていた場合、ＩＣカードが正常に動作しないことになる。
【０００９】
そこで、命令フェッチ時に不具合が発生する不良品を、出荷前に効率的に検査する新たな検査方法が必要とされている。
本発明はかかる問題に鑑み、書き換え可能な不揮発性メモリに記録された命令を、正常に命令フェッチし実行できない不具合を、出荷前に検査することができる不揮発性メモリ検査プログラム、不揮発性メモリ検査方法、及び不揮発性メモリ検査装置を提供することを目的とする。
【００１０】
【課題を解決するための手段】
上記目的を達成するために、本発明に係る不揮発性メモリ検査プログラムは、書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査プログラムであって、前記不揮発性メモリとは異なる検査対象外のメモリに記録された検査命令へ処理を移行させる移行命令を含む検証用命令群を、前記不揮発性メモリの記録領域に記録する記録ステップと、前記記録ステップにおいて記録した前記検証用命令群の先頭の命令へ処理を移行させる移行ステップと、前記検証用命令群に含まれる命令が逐次処理され、前記移行命令により前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証ステップとをコンピュータに実行させる。
【００１１】
また、本発明に係る不揮発性メモリ検査方法は、書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査方法であって、前記不揮発性メモリとは異なる検査対象外のメモリに記録された検査命令へ処理を移行させる移行命令を含む検証用命令群を、前記不揮発性メモリの記録領域に記録する記録ステップと、前記記録ステップにおいて記録した前記検証用命令群を実行させる実行ステップと、前記検証用命令群に含まれる命令が逐次実行され、前記移行命令により、前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証ステップとを含む。
【００１２】
また、本発明に係る不揮発性メモリ検査装置は、検査対象外のメモリに記録された検査命令へ、処理を移行させる移行命令を含む検証用命令群が記録された書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査装置であって、前記検証用命令群の先頭の命令へ処理を移行させる移行手段と、前記検証用命令群に含まれる命令が逐次処理され、前記移行命令により、前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証手段とを備える。
【００１３】
これによって、書き換え可能な不揮発性メモリの記録領域に検証用命令群を記録し、当該検証用命令群が正常にフェッチされ実行されるか否かを検証することができる。
従って、書き換え可能な不揮発性メモリに記録された命令を、正常に命令フェッチし実行できない不具合を、出荷前に検査することができる。
【００１４】
【発明の実施の形態】
以下、本発明の実施の形態について、図１から図１０を用いて説明する。
（実施の形態１）
＜概要＞
本発明の実施の形態１では、本発明に係る不揮発性メモリ検査方法を、８ビット幅のレジスタを備え、記録領域を１６ビットの論理アドレスによって管理するＩＣカードを用いて説明する。
【００１５】
＜構成＞
図１は、本発明に係るＩＣカード１のハードウェア構成を示す図である。
ＩＣカード１は、ＲＯＭ１０、ＣＰＵ２０、ＲＡＭ３０、及びＥＥＰＲＯＭ４０を備える。尚、図示していないが、ＩＣカード１は、リーダライタとの通信を行う通信回路等も内蔵する。
【００１６】
ＲＯＭ１０には、本実施の形態１に係る不揮発性メモリ検査プログラム１１が記録されている。また、ＲＯＭ１０には、本実施の形態１に係る検証用命令群４１ａの雛型となる雛型データも記録されている。ＲＯＭ１０の記録領域は、ＩＣカード１が内蔵するアドレス変換部（図外）により先頭アドレス０ｘ３０００から、最終アドレス０ｘＢＦＦＦまでの論理アドレス空間に割り当てられ、ＥＥＰＲＯＭ４０の記録領域は、アドレス変換部により先頭アドレス０ｘＣ０００から、最終アドレス０ｘＣ３ＦＦまでの論理アドレス空間に割り当てられている。尚、本明細書では、“０ｘ？？”と表記することで、“？？”の値が１６進数であることを表すとする。
【００１７】
ＣＰＵ２０は、内部に命令レジスタであるＩＲ２１、プログラムカウンタであるＰＣ２２、レジスタ群２３、及びデコーダ２４等を含み、ＰＣ２２が指し示す論理アドレスに記録されている命令を、ＩＲ２１に命令フェッチし、デコーダ２４によって命令を解析し、実行するプロセッサである。ＣＰＵ２０は、１命令実行するたびに、ＰＣ２２が保持する論理アドレスを１バイトづつ進めることで、複数の命令からなるプログラムを逐次実行する。本実施の形態１では、ＣＰＵ２０が、ＲＯＭ１０に記録されている不揮発性メモリ検査プログラム１１を読出し実行することにより、ＥＥＰＲＯＭにおいて命令フェッチ時に正常にデータを読み出せない不具合を、効率的に検査することができる。
【００１８】
レジスタ群２３は、Ａレジスタ２３ａ、Ｘレジスタ２３ｂ、及びＳＰ２３ｃからなる。Ａレジスタ２３ａ、及びＸレジスタ２３ｂは、８ビット幅のデータレジスタである。ＳＰ２３ｃは、スタックポインタであり、常にスタックメモリ３３の使用領域の一つ前の論理アドレスを指し示す。
ＲＡＭ３０は、ワークメモリであり、本発明に係る不揮発性メモリ検査プログラムの動作時には、ＥＥＰＲＯＭに記録されている検証対象の検証用命令群の先頭の命令の論理アドレスを保持する検査アドレス保持部３１と、ＳＰ２３ｃの値を保持するＳＰ値保持部３２と、スタックメモリ３３とを含む。スタックメモリ３３は、サブルーチン呼び出しや割り込み処理に伴う、戻りアドレス及び各レジスタの値の格納等に使われる記録領域であり、ＲＡＭ３０の最終アドレスから順にデータが格納される。
【００１９】
ＥＥＰＲＯＭ４０は、本実施の形態１において検査対象となる書き換え可能な不揮発性メモリであって、不揮発性メモリ検査プログラム１１の動作時には、先頭アドレス０ｘＣ０００から、最終アドレス０ｘＣ３ＦＦまでの全ての記録領域に、２５６組の検証用命令群４１ａが記録される。図２は、本実施の形態１において検証用命令群４１ａが記録されたＥＥＰＲＯＭのメモリイメージを示す図である。本実施の形態１に係る検証用命令群４１ａは、
命令（１）Ａレジスタの値をスタックメモリへ格納するプッシュ命令
命令（２）Ｘレジスタの値をスタックメモリへ格納するプッシュ命令
命令（３）ソフトウェア割り込み命令
命令（４）リターン命令
の４命令からなる。
【００２０】
ＣＰＵ２０は、命令（１）、及び（２）のレジスタからスタックメモリへのプッシュ命令に基づいて、指定のレジスタに格納されているデータをスタックメモリ３３へ格納し、ＳＰ２３ｃの値を格納したデータのサイズ（１バイト）分減少させる。また、ＣＰＵ２０は、命令（３）のソフトウェア割り込み命令に基づいて、割り込み終了後の戻りアドレスとなる、当該命令が記録された論理アドレスの次アドレスと、Ａレジスタ２３ａ、及びＸレジスタ２３ｂに格納されているデータとをスタックメモリに格納し、ＳＰ２３ｃの値を格納したデータのサイズ（戻りアドレスとして２バイト、Ａレジスタ２３ａとして１バイト、及びＸレジスタ２３ｂとして１バイト）分減少させ、所定の割り込みハンドラへ処理を移す。ＣＰＵ２０は、命令（４）のリターン命令に基づいて、スタックメモリの使用領域の先頭２バイト（ＳＰ２３ｃが指し示す論理アドレスの次アドレス、及びその次のアドレスのスタックメモリ）に格納されている戻りアドレスへ処理を移行させ、ＳＰ２３ｃの値を、戻りアドレスの２バイト分増加させる。
【００２１】
尚、検証用命令群４１ａに含まれるそれぞれの命令のコードサイズは１バイトであり、検証用命令群４１ａとして４バイトのコードサイズを持つ。本実施の形態１に係るＥＥＰＲＯＭ４０の記録容量は１Ｋバイトであり、４バイトの検証用命令群４１ａを、ＥＥＰＲＯＭ４０の先頭アドレスから順に繰り返し記録することで、記録領域を余すことなく、２５６組の検証用命令群４１ａをＥＥＰＲＯＭ４０に記録することができる。尚、ＥＥＰＲＯＭは、一般的に１０２４バイト（１Ｋバイト）の倍数の記録容量を持ち、これらの記録容量を持つＥＥＰＲＯＭであればどのようなＥＥＰＲＯＭであっても、記録領域を余すことなく検証用命令群４１ａを複数組記録することができる。
【００２２】
尚、本実施の形態１では、１Ｋバイトの記録容量を持つ書き換え可能な不揮発性メモリに、４バイトの検証用命令群４１ａを２５６組記録するとしたが、本発明に係る検証用命令群のコードサイズは、本実施の形態に限定されないのは勿論であり、本発明に係る不揮発性メモリ検査方法は、Ｍ（Ｍは１０２４の倍数）バイトの記録容量を持つＥＥＰＲＯＭの記録領域に、コードサイズがＮ（Ｎは１０２４以下の２の累乗）バイトの検証用命令群をＭ／Ｎ組記録し、ＥＥＰＲＯＭの記録領域を漏れなく検査することができる。
【００２３】
＜動作＞
次に、上述のように構成されたＩＣカード１における、不揮発性メモリ検査プログラム１１の処理について図を用いて説明する。
図３は、本発明の実施の形態１に係る不揮発性メモリ検査プログラム１１の処理の流を示す図である。
【００２４】
通信回路を介してリーダライタから、ＥＥＰＲＯＭの検査を指示された場合に、ＣＰＵ２０は、ＲＯＭ１０から不揮発性メモリ検査プログラム１１を読出し、実行する。
先ず、ＣＰＵ２０は、不揮発性メモリ検査プログラム１１に従って、検査の開始時に、ＥＥＰＲＯＭ４０の全ての記録領域へ、検証用命令群４１ａを繰り返し書き込み（Ｓ１）、次に、検査アドレス保持部３１に、不揮発性メモリの先頭アドレス“０ｘＣ０００”を格納する（Ｓ２）。続いて、ＣＰＵ２０は、現在のＳＰ２３ｃの値“０ｘ１０４”を、ＳＰ値保持部３２へ格納し、さらに、検証用命令群４１ａの命令（４）のリターン命令によって処理を移行する論理アドレス“０ｘ４００２”を、上位バイトと下位バイトに分けて、Ｘレジスタ２３ｂ、及びＡレジスタ２３ａへ格納する（Ｓ３）。以上の動作により、検査の準備段階が終了する。
【００２５】
次に、書込み可能な不揮発性メモリの検査ループ（Ｓ４からＳ１５）が繰り返し実行される。図４は、本実施の形態１に係る不揮発性メモリの検査時のメモリ、及びレジスタの値の変化を示すタイムチャートである。Ｓ４では、Ａレジスタ２３ａには、検証用命令群４１ａの命令（４）のリターン命令によって処理を移行させる論理アドレスの下位バイト“０ｘ０２”が格納され、Ｘレジスタ２３ｂには、命令（４）のリターン命令によって処理を移行させる論理アドレスの上位バイト“０ｘ４０”が格納されている。また、この時点では、ＳＰ２３ｃと、ＳＰ値保持部３２とが保持する値が共に“０ｘ１０４”であり、検査アドレス保持部３１は、ＥＥＰＲＯＭ４０の先頭アドレス“０ｘＣ０００”を保持する。
【００２６】
検査ループの初めに、ＣＰＵ２０は、検査アドレス保持部３１に保持されている値が、ＥＥＰＲＯＭ４０の最終アドレスの次アドレス、即ち、“０ｘＣ４００”であるか否かを判定し（Ｓ４）、検査アドレス保持部３１に保持されている値が、“０ｘＣ４００”ではない場合（Ｓ４：Ｎｏ）、不揮発性メモリ検査プログラム１１のジャンプ命令により、ＣＰＵ２０は、検査アドレス保持部３１が保持する論理アドレス“０ｘＣ０００”をＰＣ２２へ設定し、当該論理アドレスに記録された命令へ処理を移行させる（Ｓ５）。ここまでの処理は、ＲＯＭ１０に記録された不揮発性メモリ検査プログラム１１の命令を、ＣＰＵ２０が読み出して実行することにより実現される動作である。
【００２７】
次に、ＥＥＰＲＯＭに記録された検証用命令群４１ａへ処理が移り、ＣＰＵ２０は、ＰＣ２２が指し示す、ＥＥＰＲＯＭ４０の０ｘＣ０００番地に記録されている、検証用命令群４１ａの命令（１）をフェッチし、実行することにより、Ａレジスタが格納する値を、スタックメモリへ格納する（Ｓ６）。この動作により、図４に示すように、スタックメモリの０ｘ１０４番地に“０ｘ０２”が格納され、ＳＰ２３ｃの値は、“０ｘ１０３”となる。
【００２８】
続いて、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ００１番地に記録されている検証用命令群４１ａの命令（２）をフェッチし、実行することにより、Ｘレジスタが格納する値を、スタックメモリへ格納する（Ｓ７）。この動作により、図４に示すように、スタックメモリの０ｘ１０３番地には、“０ｘ４０”が格納され、ＳＰ２３ｃの値は、“０ｘ１０２”となる。
【００２９】
次に、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ００２番地に記録されている検証用命令群４１ａの命令（３）をフェッチし、ソフトウェア割り込み処理を実行し（Ｓ８）、さらに、当該ソフトウェア割り込みに対応する割り込みハンドラを処理する（Ｓ９）。図４に示すように、Ｓ８の割り込み処理により、スタックメモリの０ｘ１０２、及び０ｘ１０１番地には、ソフトウェア割り込み終了後の戻りアドレスとして、当該割り込み命令が記録されている記録領域の論理アドレスの次アドレス“０ｘＣ００３”が格納され、０ｘ１００、及び０ｘ０ＦＦ番地には、それぞれＸレジスタ２３ｂ、Ａレジスタ２３ａの値が格納され、ＳＰ２３ｃの値は、“０ｘ０ＦＥ”となる。
【００３０】
当該ソフトウェア割り込みに対応する割り込みハンドラは、ＲＯＭ１０の０ｘ５０００番地に記録されている命令であり、本実施の形態１では、割り込みハンドラで何も処理を行わず割り込み元へ処理を戻す。このとき、ＣＰＵ２０は、スタックメモリの、０ｘ０ＦＦ、及び０ｘ１００番地に格納された値を、Ａレジスタ２３ａ、及びＸレジスタ２３ｂに格納し、０ｘ１０１、及び０ｘ１０２番地に格納された論理アドレス“０ｘＣ００３”へ処理を戻し、ＳＰ２３ｃの値を、“０ｘ１０２”に戻す。
【００３１】
割り込みハンドラから処理を戻したＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ００３番地に記録されている、検証用命令群４１ａの命令（４）（リターン命令）をフェッチし、実行することにより、スタックメモリの０ｘ１０３、及び０ｘ１０４番地に格納されている論理アドレス“０ｘ４００２”へ処理を移行させ、ＳＰ２３ｃの値を、“０ｘ１０４”に戻す（Ｓ１０）。
【００３２】
ＲＯＭ１０の０ｘ４００２番地は、不揮発性メモリ検査プログラム１１が記録されている記録領域であり、検証用命令群４１ａが正常に動作したか否かを検証する命令が記録されている。ＣＰＵ２０は、現在のＳＰ２３ｃの値が、ＳＰ値保持部３２が保持する値と一致するか否かを判定する（Ｓ１１）。判定の結果が否定的である場合は（Ｓ１１：Ｎｏ）、ＣＰＵ２０は、ＥＥＰＲＯＭの、０ｘＣ０００番地、０ｘＣ００１番地、及び０ｘＣ００３番地に記録された、ＳＰ２３ｃの値を変化させる命令のうちの１つ以上の命令の命令フェッチ時に不具合が生じ、当該命令が正常に実行されなかったと判断し、ＥＥＰＲＯＭ４０に不具合があり検査結果が異常であることを示す情報を、通信回路を介して、リーダライタへ出力し（Ｓ１７）、ＥＥＰＲＯＭの検査を終了する。
【００３３】
次に、ＣＰＵ２０は、ＳＰ２３ｃが指し示す論理アドレス、及びその１バイト前の論理アドレスに、“０ｘ４００２”が記録されているが否かを判定する（Ｓ１２）。判定の結果が否定的である場合（Ｓ１２：Ｎｏ）、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ０００番地、及び０ｘＣ００１番地、に記録されたプッシュ命令のうちの１つ以上の命令の命令フェッチ時に不具合が生じ、当該命令が正常に実行されなかったと判断し、ＥＥＰＲＯＭ４０に不具合があり検査結果が異常であることを示す情報を、通信回路を介して、リーダライタへ出力し（Ｓ１７）、ＥＥＰＲＯＭの検査を終了する。
【００３４】
次に、ＣＰＵ２０は、ＳＰ２３ｃが指し示す論理アドレスの２バイト前のアドレス、及び３バイト前のアドレスに、検査アドレス保持部３１が保持する値に３バイトを加えた値が格納されているか否か、即ち、Ｓ８のソフトウェア割り込み命令によって、割り込み終了時の戻りアドレス（当該ソフトウェア割り込み命令が記録されている記録領域の論理アドレスの次アドレス“０ｘＣ００３”）が格納されているか否かを判定する（Ｓ１３）。判定の結果が否定的である場合（Ｓ１３：Ｎｏ）、ＣＰＵ２０は、ＥＥＰＲＯＭの０ｘＣ００２番地に記録されたソフトウェア割り込み命令の命令フェッチ時に不具合が生じ、当該命令が正常に実行されなかったと判断し、ＥＥＰＲＯＭ４０に不具合があり検査結果が異常であることを示す情報を、通信回路を介して、リーダライタへ出力し（Ｓ１７）、ＥＥＰＲＯＭの検査を終了する。
【００３５】
ここまでの動作により、１組の検証用命令群４１ａが記録された、ＥＥＰＲＯＭの４バイト分の記録領域の検査が完了する。
Ｓ１１からＳ１３までの全ての判定が肯定的であった場合は、ＣＰＵ２０は、ＳＰ２３ｃが指し示す論理アドレスから、５バイト前のアドレスまで（本実施の形態１では、０ｘ１０４番地から０ｘ０ＦＦ番地まで）のスタックメモリの記録領域を、“０ｘ００”に初期化し（Ｓ１４）、検査アドレス保持部３１が保持する値を、検証用命令群４１ａのコードサイズ（４バイト）分増加させ（Ｓ１５）、再びＳ４からＳ１５までの検査ループを実行することにより、検査が完了した記録領域の次アドレスから４バイト分の記録領域を検査する。
【００３６】
Ｓ４からＳ１５までの検査ループが繰り返し実行され、Ｓ４において、検査アドレス保持部３１に保持されている値が、ＥＥＰＲＯＭ４０の最終アドレスの次アドレス“０ｘＣ４００”であった場合に（Ｓ４：Ｙｅｓ）、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の全ての記録領域の検査結果が正常であり、ＥＥＰＲＯＭ４０に不具合がないことを示す情報を、通信回路を介して、リーダライタへ出力し（Ｓ１６）、ＥＥＰＲＯＭの検査を終了する。
【００３７】
以上の動作により命令フェッチ時の不具合の発生を、効率的に検査することができる。
上記の検査をＩＣカードの出荷前に実施することで、内蔵するＥＥＰＲＯＭに記録された命令を、正常に命令フェッチし実行することが出来ない不良品を、事前に見つけ出すことができる。また、本発明に係る不揮発性メモリ検査方法は、如何なる記録容量のＥＥＰＲＯＭを内蔵するＩＣカードの検査にも適用することが可能であり、本発明に係る検査を実施することにより、ＥＥＰＲＯＭの全ての記録領域を効率的に検査することができ、ＩＣカードの出荷後に、プログラムのバージョンアップやバグの修正のために、パッチプログラムをＥＥＰＲＯＭに記録した場合に、パッチプログラムを新たに記録した領域に、命令フェッチ時に不具合が発生する記録領域が含まれ、パッチプログラムが正常に動作しないという事態が発生することを未然に防ぐことができる。
【００３８】
尚、命令フェッチ時の不具合により、ＩＣカードが上述の動作の流れとは異なる、予期せぬ動作を行う場合も考え得るが、このような場合は、一定時間経過しても検査結果が正常であることを示す情報が出力されないことで、当該ＩＣカードに不具合があることを判定可能である。
（実施の形態２）
＜概要＞
本実施の形態２では、１６ビットのデータ幅をもつレジスタを備え、１６ビットの論理アドレスによって記録領域が管理されたＩＣカード２を用いて、本発明に係る不揮発性メモリ検査方法を説明する。
【００３９】
＜構成＞
図５は、本発明に係るＩＣカード２のハードウェア構成を示す図である。
本実施の形態２に係るＩＣカード２のハードウェア構成は、実施の形態１において説明したＩＣカード１のＡレジスタ２３ａ、及びＸレジスタ２３ｂを、それぞれ１６ビットのデータ幅を持つＡレジスタ２３ｄ、及びＸレジスタ２３ｅに変更したものである。
【００４０】
ＲＯＭ１０には、本実施の形態２に係る不揮発性メモリ検査プログラム１４が記録されている。また、ＲＯＭ１０には、本実施の形態２に係る検証用命令群４１ｂの雛型となる雛型データも記録されている。
本実施の形態２では、ＣＰＵ２０が、ＲＯＭ１０に記録されている不揮発性メモリ検査プログラム１４を読出し実行することにより、ＥＥＰＲＯＭ４０に記録された命令を、正常に命令フェッチ時し実行できない不具合を、効率的に検査することができる。
【００４１】
検査対象であるＥＥＰＲＯＭ４０には、本発明に係る不揮発性メモリ検査プログラム１４の動作時に、先頭アドレス０ｘＣ０００から、最終アドレス０ｘＣ３ＦＦまでの全ての記録領域に、５１２組の検証用命令群４１ｂが記録される。図６は、本実施の形態２において検証用命令群４１ｂが記録されたＥＥＰＲＯＭのメモリイメージを示す図である。本実施の形態２に係る検証用命令群４１ａは、
命令（１’）Ａレジスタの値をスタックメモリへ格納するプッシュ命令
命令（２’）リターン命令
の２命令からなる。
【００４２】
ＣＰＵ２０は、命令（１’）のレジスタからスタックメモリへのプッシュ命令に基づいて、指定のレジスタに格納されたデータをスタックメモリ３３へ格納し、ＳＰ２３ｃの値を格納したデータのサイズ（２バイト）分減少させる。また、ＣＰＵ２０は、命令（２’）のリターン命令に基づいて、スタックメモリの使用領域の先頭２バイト（ＳＰ２３ｃが指し示す論理アドレスの次アドレス、及びその次のアドレスのスタックメモリ）に格納されている戻りアドレスへ処理を移行させ、ＳＰ２３ｃの値を、戻りアドレスの２バイト分増加させる。
【００４３】
尚、検証用命令群４１ｂに含まれるそれぞれの命令のコードサイズは１バイトであり、検証用命令群４１ａとして２バイトのコードサイズを持つ。ＥＥＰＲＯＭ４０の記録容量には、２バイトの検証用命令群４１ｂを、先頭アドレスから順に繰り返し記録することで、記録領域を余すことなく、５１２組の検証用命令群４１ｂを記録することができる。尚、ＥＥＰＲＯＭは、一般的に１０２４バイト（１Ｋバイト）の倍数の記録容量を持ち、これらの記録容量を持つＥＥＰＲＯＭであればどのようなＥＥＰＲＯＭであっても、記録領域を余すことなく検証用命令群４１ｂを複数組記録することができる。
【００４４】
尚、上記と以外の構成は、ＩＣカード１の構成と同様であり、それらの説明は省略する。
＜動作＞
次に、上述のように構成されたＩＣカード２における、不揮発性メモリ検査プログラム１４の処理について図を用いて説明する。
【００４５】
図７は、本発明の実施の形態２に係る不揮発性メモリ検査プログラム１４の処理の流を示す図である。
通信回路を介してリーダライタから、ＥＥＰＲＯＭの検査を指示された場合に、ＣＰＵ２０は、ＲＯＭ１０から不揮発性メモリ検査プログラム１４を読出し、実行する。
【００４６】
先ず、ＣＰＵ２０は、不揮発性メモリ検査プログラム１４に従って、検査の開始時に、ＥＥＰＲＯＭ４０の全ての記録領域へ、検証用命令群４１ｂを繰り返して書き込み（Ｓ２１）、次に、検査アドレス保持部３１に、不揮発性メモリの先頭アドレス“０ｘＣ０００”を格納する（Ｓ２２）。続いて、ＣＰＵ２０は、検証用命令群４１ｂの命令（２’）のリターン命令によって処理を移行する論理アドレス“０ｘ４００２”を、Ａレジスタ２３ａへ格納し、また、ＳＰ２３ｃが指し示すスタックメモリ３３の０ｘ１０４番地から、“０ｘ４００２”を３回格納し、さらに、“０ｘ４００２”を３回格納したことにより、“０ｘ０ＦＥ”となったＳＰ２３ｃの値を“０ｘ１０２”に変更し、変更後のＳＰ２３ｃの値“０ｘ１０２”をＳＰ値保持部３２へ格納する（Ｓ２３）。以上の動作により、検査の準備段階が終了する。
【００４７】
次に、書込み可能な不揮発性メモリの検査ループ（Ｓ２４からＳ２９）が繰り返し実行される。図８は、本実施の形態２に係る不揮発性メモリの検査時のメモリ、及びレジスタの値の変化を示すタイムチャートである。Ｓ２４では、Ａレジスタ２３ａには、検証用命令群４１ｂの命令（２’）のリターン命令によって処理を移行させる論理アドレス“０ｘ４００２”が格納されている。また、この時点では、ＳＰ２３ｃと、ＳＰ値保持部３２とが保持する値は共に“０ｘ１０２”であり、検査アドレス保持部３１は、ＥＥＰＲＯＭ４０の先頭アドレス“０ｘＣ０００”を保持する。スタックメモリ３３には、０ｘ０ＦＦ及び０ｘ１００番地と、０ｘ１０１及び０ｘ１０２番地と、０ｘ１０３及び０ｘ１０４番地とに、それぞれ“０ｘ４００２”が記録されている。
【００４８】
検査ループの初めに、ＣＰＵ２０は、検査アドレス保持部３１に保持されている値が、ＥＥＰＲＯＭ４０の最終アドレスの次アドレス、即ち、“０ｘＣ４００”であるか否かを判定し（Ｓ２４）、検査アドレス保持部３１に保持されている値が、“０ｘＣ４００”ではない場合（Ｓ２４：Ｎｏ）、不揮発性メモリ検査プログラム１４のジャンプ命令により、ＣＰＵ２０は、検査アドレス保持部３１が保持する論理アドレス“０ｘＣ０００”をＰＣ２２へ設定し、当該論理アドレスに記録された命令へ処理を移行させる（Ｓ２５）。ここまでの処理は、ＲＯＭ１０に記録された不揮発性メモリ検査プログラム１４の命令を、ＣＰＵ２０が読み出して実行することにより実現される動作である。
【００４９】
次に、ＥＥＰＲＯＭに記録された検証用命令群４１ｂへ処理が移り、ＣＰＵ２０は、ＰＣ２２が指し示す、ＥＥＰＲＯＭ４０の０ｘＣ０００番地に記録されている、検証用命令群４１ｂの命令（１’）をフェッチし、実行することにより、Ａレジスタが格納する値を、スタックメモリへ格納する（Ｓ２６）。この動作により、図８に示すように、スタックメモリの０ｘ１０１及び０ｘ１０２番地に、“０ｘ４００２”が格納され、ＳＰ２３ｃの値は、“０ｘ１００”となる。
【００５０】
続いて、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ００１番地に記録されている検証用命令群４１ｂの命令（２’）をフェッチし、実行することにより、スタックメモリの０ｘ１０１、及び０ｘ１０２番地に格納されている論理アドレス“０ｘ４００２”へ処理を移行させ、ＳＰ２３ｃの値を、“０ｘ１０２”に戻す（Ｓ２７）。
【００５１】
ＲＯＭ１０の０ｘ４００２番地は、不揮発性メモリ検査プログラム１４が記録されている記録領域であり、検証用命令群４１ｂが正常に動作したか否かを検証する命令が記録されている。ＣＰＵ２０は、現在のＳＰ２３ｃの値が、ＳＰ値保持部３２が保持する値と一致するか否かを判定する（Ｓ２８）。
ここまでの動作により、１組の検証用命令群４１ｂが記録された、ＥＥＰＲＯＭ４０の２バイト分の記録領域の検査が完了する。Ｓ２８の判定が肯定的であった場合は、ＣＰＵ２０は、検査アドレス保持部３１が保持する値を、検証用命令群４１ｂのコードサイズ（２バイト）分増加させ（Ｓ２９）、再びＳ２４からＳ２９までの検査ループを実行することにより、検査が完了した記録領域の次アドレスから２バイト分の記録領域を検査する。
【００５２】
Ｓ２４からＳ２９までの検査ループが繰り返し実行され、Ｓ２４において、検査アドレス保持部３１に保持されている値が、ＥＥＰＲＯＭ４０の最終アドレスの次アドレス“０ｘＣ４００”であった場合に（Ｓ２４：Ｙｅｓ）、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の全ての記録領域の検査結果が正常であり、ＥＥＰＲＯＭ４０に不具合がないことを示す情報を、通信回路を介して、リーダライタへ出力し（Ｓ１６）、ＥＥＰＲＯＭの検査を終了する。
【００５３】
次に、本実施の形態２において、ＥＥＰＲＯＭ４０に記録されている命令（１’）が正常に命令フェッチされない場合の動作を詳細に説明する。
図９は、論理アドレス“０ｘＣ０００”に記録された命令（１’）の命令フェッチ時に不具合が発生した場合のタイムチャートである。Ｓ２６において、ＥＥＰＲＯＭ４０の０ｘＣ０００番地に記録されたスタックメモリを操作する命令（１’）が動作しないため、ＳＰ２３ｃの値は変化しない。
【００５４】
Ｓ２７において、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ００１番地に記録されている命令（２’）をフェッチし、実行することにより、スタックメモリの０ｘ１０３、及び０ｘ１０４番地に格納されている論理アドレス“０ｘ４００２”へ処理を移行させ、ＳＰ２３ｃの値を２バイト増加させ、“０ｘ１０４”に変更する。
【００５５】
Ｓ２８において、ＣＰＵ２０は、現在のＳＰ２３ｃの値が、ＳＰ値保持部３２が保持する値と一致するかを判定するが、ＳＰ２３ｃの値は、“０ｘ１０４”であり、ＳＰ値保持部３２が保持する値は“０ｘ１０２”であるるため、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ０００番地に記録されたプッシュ命令の命令フェッチ時に不具合が生じ、当該命令が正常に実行されなかったと判断し、Ｓ３１の異常処理を実行して、ＥＥＰＲＯＭの検査を終了する。
【００５６】
次に、本実施の形態２において、ＥＥＰＲＯＭ４０に記録されている命令（２’）が正常に命令フェッチされない場合の動作を詳細に説明する。
図１０は、論理アドレス“０ｘＣ００１”に記録された命令（２’）の命令フェッチ時に不具合が発生した場合のタイムチャートである。
Ｓ２６において、ＥＥＰＲＯＭ４０の０ｘＣ０００番地に記録された命令（１’）が正常に実行された後、ＥＥＰＲＯＭ４０の０ｘＣ００１番地に記録された命令（２’）のリターン命令が正常にフェッチされず動作しないため、ＣＰＵ２０は、続けてＥＥＰＲＯＭ４０の０ｘＣ００２番地に記録された命令（１’）をフェッチして実行する。このため、Ｓ２６が再度実行されることになり、ＳＰ２３ｃの値は、“０ｘ０ＦＥ”となる。
【００５７】
上記動作の後にＳ２７として、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ００３番地に記録されている命令（２’）のリターン命令をフェッチし、実行することにより、スタックメモリの０ｘ０ＦＦ、及び０ｘ１００番地に格納されている論理アドレス“０ｘ４００２”へ処理を移行させ、ＳＰ２３ｃの値を２バイト増加させ、“０ｘ１００”に変更する。
【００５８】
Ｓ２８において、ＣＰＵ２０は、現在のＳＰ２３ｃの値が、ＳＰ値保持部３２が保持する値と一致するかを判定するが、ＳＰ２３ｃの値は、“０ｘ１００”であり、ＳＰ値保持部３２が保持する値は“０ｘ１０２”であるるため、ＣＰＵ２０は、ＥＥＰＲＯＭ４０の０ｘＣ００１番地に記録されたリターン命令の命令フェッチ時に不具合が生じ、当該命令が正常に実行されなかったと判断し、Ｓ３１の異常処理を実行して、ＥＥＰＲＯＭの検査を終了する。
【００５９】
以上の動作により命令フェッチ時に不具合が発生するＥＥＰＲＯＭを、効率的に検出することができる。
尚、本実施の形態２においては、Ｓ２３において、スタックメモリの０ｘ１０３及び０ｘ１０４番地と、０ｘ１０１及び０ｘ１０２番地と、０ｘ０ＦＦ及び０ｘ１００番地との何れにも“０ｘ４００２”を記録し、ＥＥＰＲＯＭ４０の命令フェッチ時に不具合が発生したか否かに係らず、Ｓ２７で検証用命令群４１ｂの実行後に論理アドレス“０ｘ４００２”へ処理を移すとしたが、本発明は、Ｓ２３において、０ｘ１０１及び０ｘ１０２番地と、０ｘ１０３及び０ｘ１０４番地と、０ｘ０ＦＦ及び０ｘ１００番地とにそれぞれ異なる値を格納し、さらに、検証用命令群の命令（１’）を、スタックメモリ３３に記録されている値を変化させずにＳＰ２３ｃの値だけを２増加させる命令（１’’）に変更することで、ＥＥＰＲＯＭ４０の命令フェッチ時に不具合が発生した場合と、命令フェッチ時に不具合が発生しなかった場合とで、検証用命令群４１ｂの実行後に、異なる論理アドレスへ処理が移る構成としてもよい。
【００６０】
例えば、Ｓ２３において、０ｘ１０１及び０ｘ１０２番地には、“０ｘ４００２”を格納し、０ｘ１０３及び０ｘ１０４番地と、０ｘ０ＦＦ及び０ｘ１００番地とには、Ｓ３１に対応する異常処理の命令が記録されている記録領域の論理アドレス“０ｘ４０２０”を格納することにより、命令フェッチ時に不具合が発生しなかった場合には、Ｓ２７において０ｘ１０１及び０ｘ１０２番地に記録されている論理アドレス“０ｘ４００２”へ処理を移し、命令フェッチ時に不具合が発生した場合には、Ｓ２７において０ｘ１０３及び０ｘ１０４番地と、０ｘ０ＦＦ及び０ｘ１００番地との何れかに記録されている、“０ｘ４０２０”へ処理を移し異常処理を実行することができる。
【００６１】
また、本実施の形態２においては、検証用命令群４１ｂの命令（１’）、及び（２’）の何れの命令が正常に命令フェッチされなかった場合にも、同様の異常処理を行うとしたが、Ｓ２８において、命令（１’）、及び（２’）の何れの命令の命令フェッチ時に不具合が発生したかを判定し、Ｓ３１において、命令フェッチの不具合が、何れの論理アドレスで発生したかを示す詳細な検査結果を出力する構成としてもよい。
【００６２】
具体的には、ＳＰ２３ｃの値がＳＰ値保持部３２に保持されている値よりも大きい場合は、命令（１’）の命令フェッチ時に不具合が発生しており、検査アドレス保持部３１に保持される論理アドレスに不具合があると判定でき、ＳＰ２３ｃの値がＳＰ値保持部３２に保持されている値よりも小さい場合は、命令（２’）の命令フェッチ時に不具合が発生しており、検査アドレス保持部３１に保持される論理アドレスの次アドレスに不具合があると判定できる。
＜その他の変形例＞
尚、本発明を上記の実施の形態１、及び２に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【００６３】
（１）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなど、に記録したものとしてもよい。また、これらの記録媒体に記録されている前記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
【００６４】
また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムに従って動作するとしてもよい。
【００６５】
また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送することにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
（２）本明細書においては、本発明に係る不揮発性メモリ検査プログラムが、ＩＣカードが内蔵するＲＯＭに記録されている実施の形態を説明したが、本発明は、上記の実施の形態に限定されないのは勿論である。例えば、ＩＣカードの通信回路を介してＩＣカードのＲＡＭに、本発明に係る不揮発性メモリ検査プログラムを記録し、当該不揮発性メモリ検査プログラムを実行するとしても良い。
【００６６】
（３）上記実施の形態では、ＩＣカードに内蔵されたメモリに記録されている不揮発性メモリ検査プログラムが、ＥＥＰＲＯＭに検証用命令群を記録する構成を説明したが、本発明は、ＩＣカードの通信回路を介し、リーダライタによってＥＥＰＲＯＭに検証用命令群を記録する構成としてもよい。
（４）本明細書では、ＩＣカードに内蔵されたＥＥＰＲＯＭを検査する構成を示したが、本発明は、書き換え可能な不揮発性メモリと、プロセッサとを備えた情報機器であれば如何なる装置にも適用可能である。また、本発明は、書き換え可能な不揮発性メモリを接続し検査する、不揮発性メモリ検査装置としてもよい。
【００６７】
（５）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【００６８】
【発明の効果】
本発明に係る不揮発性メモリ検査プログラムは、書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査プログラムであって、前記不揮発性メモリとは異なる検査対象外のメモリに記録された検査命令へ処理を移行させる移行命令を含む検証用命令群を、前記不揮発性メモリの記録領域に記録する記録ステップと、前記記録ステップにおいて記録した前記検証用命令群の先頭の命令へ処理を移行させる移行ステップと、前記検証用命令群に含まれる命令が逐次処理され、前記移行命令により前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証ステップとをコンピュータに実行させる。
【００６９】
また、本発明に係る不揮発性メモリ検査方法は、書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査方法であって、前記不揮発性メモリとは異なる検査対象外のメモリに記録された検査命令へ処理を移行させる移行命令を含む検証用命令群を、前記不揮発性メモリの記録領域に記録する記録ステップと、前記記録ステップにおいて記録した前記検証用命令群を実行させる実行ステップと、前記検証用命令群に含まれる命令が逐次実行され、前記移行命令により、前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証ステップとを含む。
【００７０】
また、本発明に係る不揮発性メモリ検査装置は、検査対象外のメモリに記録された検査命令へ、処理を移行させる移行命令を含む検証用命令群が記録された書き換え可能な不揮発性メモリを検査する不揮発性メモリ検査装置であって、前記検証用命令群の先頭の命令へ処理を移行させる移行手段と、前記検証用命令群に含まれる命令が逐次処理され、前記移行命令により、前記検査命令へ処理が移行した場合に、前記検証用命令群が正常に実行されたか否かを検証し、当該検証の結果が肯定的であれば、前記検証用命令群を記録した記録領域が正常であると見なす検証手段とを備える。
【００７１】
これによって、書き換え可能な不揮発性メモリの記録領域に検証用命令群を記録し、当該検証用命令群が正常にフェッチされ実行されるか否かを検証することができる。
従って、書き換え可能な不揮発性メモリに記録された命令を、正常に命令フェッチし実行できない不具合を、出荷前に検査することができる。
【００７２】
また、前記コンピュータは、スタックメモリと、スタックポインタとを含み、前記検証用命令群に含まれる命令は、正常に動作した場合に、前記スタックポインタの値を変化させ、前記検証ステップは、前記スタックポインタの値に基づいて、前記検証用命令群が正常に実行されたか否かを検証するスタックポインタ検証サブステップを含むことを特徴とする。
【００７３】
これによって、検証用命令群に含まれる命令が正常に動作したことを、当該検証用命令群の動作後に、前記命令が変化させたスタックポインタの値から検証することができる。
従って、検証用命令群に含まれる命令が記録されている記録領域毎に、命令が正常に命令フェッチされ実行されることを検査することができる。
【００７４】
また、前記コンピュータは、スタックメモリと、スタックポインタとを含み、前記移行命令は、前記検査命令へ処理を移行させる時に、前記スタックポインタの値を変化させるリターン命令であり、前記検証ステップは、前記スタックポインタの値に基づいて、前記リターン命令が正常に実行されたか否かを検証するリターン命令検証サブステップを含むことを特徴とする。
【００７５】
これによって、検査対象外のメモリに記録されている検査命令へ処理を移行する移行命令が記録されている記録領域も、命令フェッチ時に不具合が発生しないか否かを検査することができる。
また、前記移行ステップは、前記検査命令が記録されている記録領域の論理アドレスを、前記コンピュータガ備えるレジスタへ格納するレジスタ格納サブステップと、前記記録ステップにおいて前記検証用命令群の先頭の命令を記録した記録領域の論理アドレスを、前記コンピュータが備えるプログラムカウンタへ格納することにより、処理を移行させる移行サブステップとを含み、前記検証用命令群は、前記スタックポインタの値を進め、前記レジスタに格納されている論理アドレスを、前記スタックメモリへ格納するスタック格納命令を含み、前記移行命令は、前記スタックポインタの値を戻し、前記スタックメモリに格納されている論理アドレスへ処理を移行させるリターン命令であることを特徴とする。
【００７６】
これによって、検証用命令群の動作後に、検査対象外のメモリに記録された検査命令へ処理を移し、検査対象の不揮発性メモリで命令フェッチ時に不具合が発生したか否か検査することができる。
従って、命令フェッチ時の動作が保証されたメモリに記録された不揮発性メモリ検査プログラムによって、検査対象外のメモリでの命令フェッチ時の不具合を考慮することなく、検査対象の不揮発性メモリに記録された検証用命令群が正常にフェッチされ動作した否かを正確に検証することができる。
【００７７】
また、前記コンピュータは、スタックメモリと、スタックポインタとを含み、前記検証用命令群は、所定の記録領域に、所定の値を記録するメモリ操作命令を少なくとも１つ含み、前記検証ステップは、前記所定の記録領域に、前記所定の値が記録されているか否かを判定することにより、前記メモリ操作命令が正常に実行されたか否かを検証するメモリ検証サブステップとを含むことを特徴とする。
【００７８】
これによって、検証用命令群に含まれるメモリ操作命令が正常に動作したことを、検証用命令群の動作後に検証することができる。
従って、メモリ操作命令が記録されている記録領域において、命令フェッチ時の不具合が発生するか否かを検査することができる。
また、前記コンピュータは、スタックメモリと、スタックポインタとを含み、前記メモリ操作命令は、正常に動作した場合に、割り込み終了時の戻りアドレスを前記スタックメモリに格納する処理を行うソフトウェア割り込み命令であり、前記メモリ検証サブステップは、前記戻りアドレスが格納されていた記録領域の格納アドレスを、スタックポインタの値から算出する算出サブステップと、前記格納アドレスが指し示す記録領域に前記戻りアドレスが記録されているか否かを判定することにより、前記ソフトウェア割り込み命令が正常に実行されたか否かを検証する割り込み命令検証サブステップとを含むことを特徴とする。
【００７９】
これによって、ソフトウェア割り込み命令が記録されている書き換え可能な不揮発性メモリ記録領域において、命令フェッチ時の不具合が発生するか否かを検査しつつ、当該ソフトウェア割り込み命令が記録されている論理アドレスを確認する事ができる。
従って、書き換え可能な不揮発性メモリのどの論理アドレスを検査したかを正確に把握することが可能となる。
【００８０】
また、前記記録ステップは、前記不揮発性メモリの連続した記録領域へ、複数組の前記検証用命令群を記録し、前記コンピュータは、前記複数組の検証用命令群のうちの何れか１組の検証用命令群の先頭の命令が記録された記録領域の論理アドレスを保持する保持手段を備え、前記移行ステップは、前記保持手段が保持する論理アドレスに記録された命令へ処理を移行させ、当該不揮発性メモリ検査プログラムは、さらに、前記検証ステップにおける検証結果が肯定的な場合に、前記保持手段が保持する論理アドレスを、前記検証用命令群のコードサイズ分増加させる加算ステップと、前記検証ステップにおける検証結果が否定的な場合に、異常処理を行う異常処理ステップとを含むことを特徴とする。
【００８１】
これによって、検証用命令群のコードサイズの倍数の記録容量を持つ、書き換え可能な不揮発性メモリの記録領域を検査することができる。
従って、様々な記録容量の不揮発性メモリ毎に、専用の検証用命令群を用意する必要がなく、汎用性のある不揮発性メモリ検査プログラムを実現できる。
また、前記検証用命令群のコードサイズは、１０２４以下の２の累乗バイトであり、前記不揮発性メモリの記録容量は、１０２４の倍数バイトであり、前記記録ステップは、前記複数組の検証用命令群を、前記不揮発性メモリに割り当てられた先頭アドレスから、最終アドレスまでの全ての記録領域に漏れなく記録することを特徴とする。
【００８２】
これによって、一般的に用いられる、１Ｋバイトの倍数の記録容量を持った書き換え可能な不揮発性メモリならば、如何なる記録容量の場合にも全ての記録領域を漏れなく検査することができる。
従って、本発明に係る検査を実施することにより、出荷後にプログラムのバージョンアップやバグの修正のために、パッチプログラムをＥＥＰＲＯＭに記録した場合に、パッチプログラムを新たに記録した記録領域に、命令フェッチ時に不具合が発生する記録領域が含まれ、パッチプログラムが正常に動作しないという事態が発生することを未然に防ぐことができる。
【００８３】
本発明に係る不揮発性メモリ検査方法は、従来の検査方法において考慮されていなかった、命令フェッチ時の不具合を検査することがでる。本発明に係る検査を実施することにより、出荷後に命令フェッチ時の不具合が発生する不良品を確認でき、当該不良品を回収する場合の費用が必要なくなり、また、回収によるユーザイメージの低下を未然に防ぐことができる。
【図面の簡単な説明】
【図１】本発明に係るＩＣカード１のハードウェア構成を示す図である。
【図２】本実施の形態１において検証用命令群４１ａが記録されたＥＥＰＲＯＭのメモリイメージを示す図である。
【図３】本発明の実施の形態１に係る不揮発性メモリ検査プログラム１１の処理の流を示す図である。
【図４】本実施の形態１に係る不揮発性メモリの検査時のメモリ、及びレジスタの値の変化を示すタイムチャートである。
【図５】本発明に係るＩＣカード２のハードウェア構成を示す図である。
【図６】本実施の形態２において検証用命令群４１ｂが記録されたＥＥＰＲＯＭのメモリイメージを示す図である。
【図７】本発明の実施の形態２に係る不揮発性メモリ検査プログラム１４の処理の流を示す図である。
【図８】本実施の形態２に係る不揮発性メモリの検査時のメモリ、及びレジスタの値の変化を示すタイムチャートである。
【図９】論理アドレス“０ｘＣ０００”に記録された命令（１’）の命令フェッチ時に不具合が発生した場合のタイムチャートである。
【図１０】論理アドレス“０ｘＣ００１”に記録された命令（２’）の命令フェッチ時に不具合が発生した場合のタイムチャートである。
【符号の説明】
１、２          ＩＣカード
１０            ＲＯＭ
１１、１４      不揮発性メモリ検査プログラム
１２、１５      処理移行手段
１３、１６      検証手段
２０            ＣＰＵ
２１            ＩＲ
２２            ＰＣ
２３            レジスタ群
２３ａ、２３ｄ  Ａレジスタ
２３ｂ、２３ｅ  Ｘレジスタ
２３ｃ          ＳＰ
２４            デコーダ
３０            ＲＡＭ
３１            検査アドレス保持部
３２            ＳＰ値保持部
３３            スタックメモリ
４０            ＥＥＰＲＯＭ
４１ａ、４１ｂ  検証用命令群
【図１】
2004272808.tif 000003
【図２】
2004272808.tif 000004
【図３】
2004272808.tif 000005
【図４】
2004272808.tif 000006
【図５】
2004272808.tif 000007
【図６】
2004272808.tif 000008
【図７】
2004272808.tif 000009
【図８】
2004272808.tif 000010
【図９】
2004272808.tif 000011
【図１０】
2004272808.tif 000012