(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、
書き換え可能な不揮発性メモリと、
前記ＣＰＵが実行可能なプログラムを格納する読み出し専用メモリと、
を備えるＩＣカードであって；
前記不揮発性メモリは、自身に格納されている、前記ＣＰＵが実行可能なアプリケーション・プログラムの個数情報を格納しており；
前記読み出し専用メモリは、
前記不揮発性メモリの所定アドレスに初期設定されるアドレス情報と、
前記アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づいて、前記アドレス情報を更新する更新プログラムと、
外部より付与された前記アプリケーション・プログラムを前記不揮発性メモリに書き込み、かつ、前記個数情報を更新する書込プログラムと、
を格納しており；
前記書込プログラムは、前記個数情報に示される回数だけ前記更新プログラムが実行された後に、前記アドレス情報により特定される前記アプリケーション・プログラムを格納可能な領域に書き込みを行う、
ことを特徴とするＩＣカード。
【請求項２】
ＣＰＵと、
書き換え可能な不揮発性メモリと、
前記ＣＰＵが実行可能なプログラムを格納する読み出し専用メモリと、
を備えるＩＣカードであって；
前記不揮発性メモリは、前記ＣＰＵが実行可能な１又は２以上のアプリケーション・プログラムと、
自身に格納されている前記アプリケーション・プログラムの個数情報を格納しており；
前記読み出し専用メモリは、
前記不揮発性メモリの所定アドレスに初期設定される検索アドレス情報と、
外部より付与された参照情報と前記検索アドレス情報によって特定される前記アプリケーション・プログラムが有する識別情報とを照合する照合プログラムと、
前記照合プログラムによる照合が成功しなかったときに、前記検索アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づいて、前記検索アドレス情報を更新する検索アドレス更新プログラムと、
を格納しており；
前記照合プログラム及び前記検索アドレス更新プログラムを繰り返し実行することにより、前記アプリケーション・プログラムを順次検索し、
前記照合が成功した場合、又は、前記検索アドレスの更新回数が前記個数情報に示される値に達したときは、前記検索が終了する、
ことを特徴とするＩＣカード。
【請求項３】
ＣＰＵと、書き換え可能な不揮発性メモリとを備えるＩＣカードの前記不揮発性メモリに前記ＣＰＵが実行可能なアプリケーション・プログラムを導入するプログラム導入方法であって、
前記ＣＰＵが、
アドレス情報を前記不揮発性メモリの所定アドレスに初期設定し、
前記アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づき前記アドレス情報を更新する更新処理を、前記不揮発性メモリに格納されている前記アプリケーション・プログラムの個数と等しい回数実行し、
更新された前記アドレス情報により特定される、前記アプリケーション・プログラムを格納可能な領域に、外部より付与された前記アプリケーション・プログラムを書き込み、
前記個数情報を更新する、
ことを特徴とするプログラム導入方法。
【請求項４】
ＣＰＵと、前記ＣＰＵが実行可能な１又は２以上のアプリケーションプログラムを格納する書き換え可能な不揮発性メモリとを備えるＩＣカードの前記アプリケーション・プログラムを実行するプログラム実行方法であって、
前記ＣＰＵが、
検索アドレス情報を前記不揮発性メモリの所定アドレスに初期設定し、外部より付与された参照情報と、前記検索アドレス情報によって特定される前記アプリケーション・プログラムが有する識別情報とを照合する照合処理、及び、前記照合処理が成功しなかった場合に、前記検索アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づいて、前記アプリケーション・プログラムを順次検索し、
前記照合処理が成功した場合には、前記検索を終了して、そのときの前記検索アドレス情報により特定されるアプリケーションプログラムを実行し、
前記更新処理が前記アプリケーション・プログラムの個数と等しい回数実行された場合には、前記検索を終了し、いずれの前記アプリケーション・プログラムも実行しない、
ことを特徴とするプログラム実行方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、不揮発性メモリにＣＰＵが実行可能なアプリケーション・プログラムを格納することが可能なＩＣカード等に関するものである。
【０００２】
【従来の技術】
ＩＣカードは、磁気カードに代わる新しい情報記憶媒体として、近年注目を集めている。特に、ＣＰＵを内蔵したＩＣカードは、高度なセキュリティを実現できることから、高度情報化社会の種々の分野において利用されることが期待されている。
【０００３】
一般にＩＣカードは、ＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭの３種類のメモリと、それらメモリにアクセスするＣＰＵとを備えている。ＥＥＰＲＯＭは、書換え可能な不揮発性メモリであり、ＩＣカードユーザの個人情報等のデータが保存される。ＲＡＭは、ＣＰＵがプログラムを実行するときに作業領域として使用する揮発性のメモリである。ＲＯＭは、読み出し専用メモリであり、ＣＰＵが実行すべきプログラムが格納されている。
【０００４】
ＲＯＭが格納するプログラムは、ＩＣカードの用途ごとに異なる。したがって、ＩＣカードの用途が多種多様化すると、それだけ多くの種類のＲＯＭを用意することとなる。しかし、一般にＲＯＭは、その開発に多大の費用を必要とする。このために、ＩＣカードの用途の多様化に合わせ、ＲＯＭを多品種少量生産することとすれば、ＲＯＭの単価が上がり、ＩＣカードの製造原価が増大する。
【０００５】
上記の問題に対し、従来ＲＯＭに格納されていたプログラムを２種類に大別し、一方をＲＯＭに、他方をＥＥＰＲＯＭに格納するＩＣカードが、提案されている。ここで、２種類のプログラムの一方は、ＩＣカードの用途によらず汎用的に使用できるプログラム（以下「汎用プログラム」という）である。また、他方は、ＩＣカードの各種用途固有の処理を行うプログラム（以下「アプリケーション・プログラム」という）である。
【０００６】
上記のＩＣカードでは、全用途のＩＣカードについて、同一のＲＯＭを使用することとなるので、安価なＲＯＭを用いた安価なＩＣカードが生産される。一方、ＩＣカードのＥＥＰＲＯＭには、各用途に対応した１つのアプリケーション・プログラムが書き込まれることから、用途に応じた木目細かい処理を行うＩＣカードを提供することが可能となっている。
【０００７】
【発明が解決しようとする課題】
上記のように、従来のＩＣカードでは、１のアプリケーション・プログラムをＥＥＰＲＯＭに格納することにより、ＩＣカードを各種用途へ適切に対応させることを可能としていた。しかし、ＩＣカードに対するユーザーの要求は年々高度化・複雑化し、多種多様の機能をユーザー側で任意に選択・実行できる、柔軟性の高いＩＣカードが望まれている。
【０００８】
このような要求に応える一つの方法として、ＥＥＰＲＯＭに複数個のアプリケーション・プログラムを格納することが考えられる。ところが、前述のようにアプリケーション・プログラムは各種用途に合わせて任意に製作されるものであり、このために各アプリケーション・プログラムの長さ（バイト数）はまちまちである。したがって、ＥＥＰＲＯＭに２個以上のアプリケーション・プログラムを格納しようとする場合には、先に格納されたプログラムにより占有されているメモリ領域が一定でないために、次のアプリケーション・プログラムを格納すべきメモリ領域を特定できないという問題があった。
【０００９】
また、複数のアプリケーション・プログラムが格納されたＥＥＰＲＯＭにおいては、上記と同様の理由により、２番目以降のプログラムの格納されている領域を一義的に特定することはできない。このために、任意のアプリケーション・プログラムを選択して、実行することが困難であるという問題があった。
【００１０】
そこで、本発明の課題は、複数のアプリケーション・プログラムを格納し、任意のものを選択・実行することが可能なＩＣカード等を提供することである。
【００１１】
【課題を解決するための手段】
前記課題を解決するために、請求項１の発明は、ＣＰＵと、書き換え可能な不揮発性メモリと、前記ＣＰＵが実行可能なプログラムを格納する読み出し専用メモリと、を備えるＩＣカードであって；前記不揮発性メモリは、自身に格納されている、前記ＣＰＵが実行可能なアプリケーション・プログラムの個数情報を格納しており；前記読み出し専用メモリは、前記不揮発性メモリの所定アドレスに初期設定されるアドレス情報と、前記アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づいて、前記アドレス情報を更新する更新プログラムと、外部より付与された前記アプリケーション・プログラムを前記不揮発性メモリに書き込み、かつ、前記個数情報を更新する書込プログラムと、を格納しており；前記書込プログラムは、前記個数情報に示される回数だけ前記更新プログラムが実行された後に、前記アドレス情報により特定される前記アプリケーション・プログラムを格納可能な領域に書き込みを行う、ことを特徴とするＩＣカードである。
【００１４】
請求項２の発明は、ＣＰＵと、書き換え可能な不揮発性メモリと、前記ＣＰＵが実行可能なプログラムを格納する読み出し専用メモリと、を備えるＩＣカードであって；前記不揮発性メモリは、前記ＣＰＵが実行可能な１又は２以上のアプリケーション・プログラムと、自身に格納されている前記アプリケーション・プログラムの個数情報を格納しており；前記読み出し専用メモリは、前記不揮発性メモリの所定アドレスに初期設定される検索アドレス情報と、外部より付与された参照情報と前記検索アドレス情報によって特定される前記アプリケーション・プログラムが有する識別情報とを照合する照合プログラムと、前記照合プログラムによる照合が成功しなかったときに、前記検索アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づいて、前記検索アドレス情報を更新する検索アドレス更新プログラムと、を格納しており；前記照合プログラム及び前記検索アドレス更新プログラムを繰り返し実行することにより、前記アプリケーション・プログラムを順次検索し、前記照合が成功した場合、又は、前記検索アドレスの更新回数が前記個数情報に示される値に達したときは、前記検索が終了する、ことを特徴とするＩＣカードである。
【００１８】
請求項３の発明は、ＣＰＵと、書き換え可能な不揮発性メモリとを備えるＩＣカードの前記不揮発性メモリに前記ＣＰＵが実行可能なアプリケーション・プログラムを導入するプログラム導入方法であって、前記ＣＰＵが、アドレス情報を前記不揮発性メモリの所定アドレスに初期設定し、前記アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づき前記アドレス情報を更新する更新処理を、前記不揮発性メモリに格納されている前記アプリケーション・プログラムの個数と等しい回数実行し、更新された前記アドレス情報により特定される、前記アプリケーション・プログラムを格納可能な領域に、外部より付与された前記アプリケーション・プログラムを書き込み、前記個数情報を更新する、ことを特徴とするプログラム導入方法である。
【００１９】
請求項４の発明は、ＣＰＵと、前記ＣＰＵが実行可能な１又は２以上のアプリケーションプログラムを格納する書き換え可能な不揮発性メモリとを備えるＩＣカードの前記アプリケーション・プログラムを実行するプログラム実行方法であって、前記ＣＰＵが、検索アドレス情報を前記不揮発性メモリの所定アドレスに初期設定し、外部より付与された参照情報と、前記検索アドレス情報によって特定される前記アプリケーション・プログラムが有する識別情報とを照合する照合処理、及び、前記照合処理が成功しなかった場合に、前記検索アドレス情報により特定される前記アプリケーション・プログラムの有する先頭アドレス情報に基づいて、前記アプリケーション・プログラムを順次検索し、前記照合処理が成功した場合には、前記検索を終了して、そのときの前記検索アドレス情報により特定されるアプリケーションプログラムを実行し、前記更新処理が前記アプリケーション・プログラムの個数と等しい回数実行された場合には、前記検索を終了し、いずれの前記アプリケーション・プログラムも実行しない、ことを特徴とするプログラム実行方法である。
【００２０】
【発明の実施の形態】
以下、図面等を参照して、本発明に係る一実施形態について、さらに詳しく説明する。
図１は、本発明に係るＩＣカードの構成を示す図である。
図１に示されるように、ＩＣカード１０は、読み出し専用メモリであるＲＯＭ１２、揮発性メモリであるＲＡＭ１４、随時書換え可能な不揮発性メモリのＥＥＰＲＯＭ１６及びそれらメモリにアクセスするＣＰＵ１８を備えている。
【００２１】
また、ＩＣカード１０は、リーダ／ライタ（不図示）と電気信号等の授受を行うための複数の接点（Ｖｃｃ〜ＧＮＤ）を備えている。ＩＣカードをリーダ／ライタに挿入すると、リーダ／ライタの接点がこのＩＣカードの接点と接続され、電気信号の授受が行われる。各接点には、それぞれ異なる電気信号が割り付けられている。例えば、ＶｃｃはＩＣが動作するために必要な電源電圧の供給を受けるための接点であり、Ｉ／０は、ＣＰＵがリーダ／ライタと通信を行うための接点（シリアルポート）である。
【００２２】
ＣＰＵ１８は、上記接点を介してリーダ・ライタからコマンド付与され、そのコマンドに従いＲＯＭ１２又はＥＥＰＲＯＭ１６に格納されているプログラムを実行し、その結果、ＥＥＰＲＯＭ１６等にアクセスする。本実施形態では、ＣＰＵ１８が実行すべきコマンドを前述した汎用プログラムとアプリケーション・プログラムとに分割し、汎用プログラムをＲＯＭ１２に、アプリケーション・プログラムをＥＥＰＲＯＭ１６に格納することとしている。
【００２３】
図２は、本実施形態の各メモリーに割り付けられているアドレスの一例を示す図である。本実施形態では、例えばＲＯＭ１２にＨ’００００〜Ｈ’２７ＦＦ、ＲＡＭ１４にＨ’４０００〜Ｈ’４０ＦＦ、ＥＥＰＲＯＭ１６にＨ’６０００〜Ｈ’７ＦＦＦなるアドレスを割り当てている。なお、本明細書において数値の前に付されている「Ｈ’」は、その数値が１６進数に基づいて表記されていることを意味する。
【００２４】
図３は、ＥＥＰＲＯＭ１６のメモリ・マップを示す図である。
本実施形態では、ＥＥＰＲＯＭ１６の先頭の領域、すなわちＨ’６０００からＨ’６００Ｆをシステムエリアとして確保している。システムエリアの先頭アドレスＨ’６０００には、変数ＮＯＡが格納されている。ＮＯＡは、ＥＥＰＲＯＭ１６に格納（登録）されているアプリケーション・プログラムの個数を示す変数である。ＮＯＡは、０に初期設定され、後述するように１のアプリケーション・プログラムがＥＥＰＲＯＭ１６に格納されるごとにその値を１ずつ加算される。アドレスＨ’６００１〜Ｈ’６００Ｆまでの領域（ＲＦＵ）は、将来ＩＣカードの仕様を変更したときに、その仕様において必要とされる各種パラメータ等を格納するための予備的な空白領域である。
【００２５】
アドレスＨ’６０１０以降は、アプリケーション・プログラムを格納することが可能な領域である。図３には、一例として、２つのアプリケーション・プログラムが格納されている状態が示されている。第１のアプリケーション・プログラムはＨ’６０１０〜Ｈ’６０７Ｆの領域に、第２のアプリケーション・プログラムは、Ｈ’６０８０〜Ｈ’６０ＤＢの領域にそれぞれ格納されている。このように本実施形態では、２以上のアプリケーション・プログラムを格納する場合は、後のプログラムを先のプログラムの直後に格納し、それらの間に未使用のメモリ領域が存在しないようにしている。すなわち、本実施形態では、限られたメモリ資源を最大限有効に活用できるよう、アプリケーション・プログラムをＥＥＰＲＯＭ１６に格納しているのである。なお、アプリケーション・プログラムの具体的な格納方法については、図６等において詳細に説明する。
【００２６】
ＥＥＰＲＯＭ１６に格納されているアプリケーション・プログラムは、ａｎ＿１からapplication program までの５つの情報から構成されている。
ａｎ＿１及びapplication ＿nameは、アプリケーション・プログラムを識別するための情報である。すなわち、application ＿nameは、当該アプリケーション・プログラムの名前であり、ａｎ＿１は、application ＿nameの長さ（バイト数）を示す１バイトのデータである。
【００２７】
ＮＡ＿ＡＤＤは、当該アプリケーション・プログラムの次に格納されている、又は、格納されるべきアプリケーション・プログラムの先頭アドレスを示す２バイトのデータである。図３の例では、第１のアプリケーション・プログラムが有するＮＡ＿ＡＤＤは、第２番目のアプリケーション・プログラムの先頭アドレスＨ’６０８０を示している。また、第２番目のアプリケーション・プログラムが有するＮＡ＿ＡＤＤは、将来第３番目のアプリケーション・プログラムが格納されるべき領域の先頭アドレスＨ’６０ＤＣを示している。なお、本実施形態では、ＮＡ＿ＡＤＤは、必ずapplication ＿nameの次の領域に格納される。
【００２８】
ａｐｌ＿１は、ＮＡ＿ＡＤＤの次に格納されている２バイトのデータであり、その直後に格納されているapplication program の長さ（バイト数）を示している。application program は、アプリケーション・プログラムのＣＰＵ命令コード、及びプログラム実行時に参照されるべきデータ等の集合である。
【００２９】
図３に示されるように、本実施形態では、ＥＥＰＲＯＭ１６に複数のアプリケーション・プログラムをメモリ資源を有効に利用しながら格納している。このように、２以上のアプリケーション・プログラムをＥＥＰＲＯＭ１６に格納し、それぞれを実行するために、本実施形態では、Application Loadコマンド及びSelectコマンドという２つのコマンドを新たに用意した。Application Loadコマンドは、アプリケーション・プログラムをＥＥＰＲＯＭ１６に格納するためのコマンドである。また、Selectコマンドは、ＥＥＰＲＯＭ１６に格納されている特定のアプリケーション・プログラムを実行するためのコマンドである。
【００３０】
図４は、Application Loadコマンド及びSelectコマンドのフォーマットを示す図である。
図に示されるように、Application Loadコマンドは、５種類の情報より構成されている。第１バイト目であるＩＮＳは、このコマンド識別するための１バイトからなる種別コードである。本実施形態では、Application Loadコマンドの種別コードとして例えば「０１」を割り当てている。また、Application Loadコマンドの第２バイト目以降には、順に、格納すべきアプリケーション・プログラムに関するａｎ＿１、application ＿name、ａｐｌ＿１、及びapplication program が配置されている。
【００３１】
一方、Selectコマンドは、３種類の情報から構成されている。第１バイト目は、Application Loadと同様にＩＮＳが配置されている。本実施形態では、SelectコマンドのＩＮＳとして、例えば「０２」なるコードを割り当てている。また、Selectコマンドの第２バイト目以降には、実行すべきアプリケーション・プログラムのａｎ＿１とapplication ＿nameとが順に配置されている。
【００３２】
図５は、ＲＯＭ１２に格納されている汎用プログラムの流れ図である。以下、図５に基づき、ＩＣカード１０の動作の概要について説明する。
ＩＣカード１０とリーダ・ライタとが接続され、リーダ・ライタによりＩＣカードがリセット（活性化）されると、ＣＰＵ１８は、まず初期応答情報（ＡＴＲ）をレスポンスとして出力する（Ｓ５０２）。次に、ＣＰＵ１８は、リーダ・ライタからのコマンド待ち状態となる（Ｓ５０４、Ｓ５０６）。
【００３３】
リーダ・ライタからのコマンドを受信すると（Ｓ５０６：Ｙｅｓ）、ＣＰＵ１８は、そのコマンドの第１バイト目であるＩＮＳを確認する（Ｓ５０８）。ここでＩＮＳの内容が「０１」であると、本実施形態では、コマンドがApplication Loadコマンドであると判断され、アプリケーション・プログラムをＥＥＰＲＯＭ１６へ格納するための処理が実行される（Ｓ５１０）。
【００３４】
一方、ステップ５０８において、ＩＮＳの内容が「０２」である場合には、コマンドがSelectコマンドであると判断される。この結果、Selectコマンドが指定するアプリケーション・プログラムの、ＥＥＰＲＯＭ１６におけるアドレスを特定するための処理が実行される（Ｓ５１２）。
【００３５】
ステップ５０８において、ＩＮＳの内容が「０１」又は「０２」のいずれでもない場合には、ＣＰＵ１８は、ステップ５１４へ進む。ステップ５１４では、すでにSelectコマンドが処理され、所定のアプリケーション・プログラムが選択済みであるか否かが判断される。具体的には、ＲＡＭ１４の所定領域に、Selectコマンドを処理することにより特定された、アプリケーション・プログラムのアドレスが存在するか否かが判断される。
【００３６】
ステップ５１４において、アプリケーションが選択済みであると判断されると、受信されたコマンドのパラメータに基づいて、当該アプリケーション・プログラムが実行される（Ｓ５１６）。
一方、ステップ５１４において、アプリケーションが選択されていないと判断されると、コマンド・エラー・ステータスがＲＡＭ１４の所定領域にレスポンス情報として編集される（Ｓ５１８）。
【００３７】
次に、ステップ５１０、５１２、５１６又は５１８のいずれかの処理が終了すると、ＲＡＭ１４の所定領域に編集されたレスポンス情報が、リーダ・ライタに送信される（Ｓ５２０）。レンスポンス情報が送信された後は、再びステップ５０４に戻り、ステップ５２０までの処理が繰り返される。
【００３８】
次に、ステップ５１０、５１２、及び５１６のそれぞれにおいてなされる処理について説明する。
図６は、ステップ５１０の処理内容、つまり、Application Loadコマンドが受信された場合にＣＰＵ１８が実行する処理内容を示す流れ図である。
ＣＰＵ１８は、Application Loadコマンドが受信されると、まずシステムエリアのアドレスＨ’６０００を参照し、ＮＯＡのデータを読み出す（Ｓ６０２）。次に、ＣＰＵ１８は、２つの変数search＿address 及びcounter を初期設定する。search＿address は、アプリケーション・プログラムを格納する領域の先頭アドレスＨ’６０１０に初期設定される（Ｓ６０４）。また、counter は、ステップ６０２において取得されたＮＯＡの値に初期設定される（Ｓ６０６）。
【００３９】
次に、アプリケーション・プログラムを新たに格納することが可能なＥＥＰＲＯＭ１６上の領域の先頭アドレスが特定される（Ｓ６０８〜Ｓ６１２）。
具体的には、search＿address にＮＡ＿ＡＤＤの内容を代入し、counter の値を１だけデクリメントする一連の処理（Ｓ６１０、Ｓ６１２）が、counter の値が０となるまで（Ｓ６０８：Ｙｅｓ）繰り返される。なお、ステップ６１０におけるＮＡ＿ＡＤＤは、ステップ６０８においてsearch＿address が示すアドレス以降に現れる最初のＮＡ＿ＡＤＤ、すなわち、search＿address によって特定されるアプリケーション・プログラムが有するＮＡ＿ＡＤＤである。
【００４０】
ステップ６０８から６１２間での処理は、例えば、図３に示した例では、２回繰り返されて行われる。すなわち、search＿address の内容は、１回目の処理により、第２番目のアプリケーション・プログラムの先頭アドレスであるＨ’６０８０に更新される。また、２回目の処理では、第３番目のアプリケーション・プログラムを格納することが可能である領域の先頭アドレス、Ｈ’６０ＤＣに更新される。
【００４１】
次に、上記処理により特定されたアドレス以降に、アプリケーション・プログラムを書き込む処理が実行される（Ｓ６１４〜Ｓ６３６）。
まず、変数write ＿address にsearch＿address の値が代入され（Ｓ６１４）、そのwrite ＿address が示すアドレスにApplication Loadコマンドのａｎ＿１が書き込まれる（Ｓ６１６）。書込が終了すると、write ＿address は、ａｎ＿１の長さ（バイト数）を加算することにより更新される（Ｓ６１８）。
【００４２】
次に、更新されたwrite ＿address が示すアドレスよりApplication Loadコマンドのapplication ＿nameの内容が書き込まれる（Ｓ６２０）。書込が終了すると、write ＿address は、ａｎ＿１の示す値だけ、すなわち、書き込んだapplication ＿nameの長さ（バイト数）を加算することにより再び更新される（Ｓ６２４）。
【００４３】
次に、後にＮＡ＿ＡＤＤを上記application ＿nameの直後に書き込むための処理が行われる。すなわち、更新されたwrite ＿address の値は、変数NA＿ADD ＿address に代入され（Ｓ６２４）、その後に、ＮＡ＿ＡＤＤの長さ（２バイト）がwrite ＿address に加算される（Ｓ６２６）。
【００４４】
次に、write ＿address が示すアドレスに、Application Loadコマンドのａｐｌ＿１の内容が書き込まれ（Ｓ６２８）、その後にwrite ＿address にａｐｌ＿１の長さが加算される（Ｓ６３０）。
さらに、write ＿address が示すアドレスに、application program が書き込まれ（Ｓ６３２）、write ＿address にａｐｌ＿１が示す値が加算される（Ｓ６３４）。
【００４５】
次に、write ＿address の値は、NA＿ADD ＿address が示すアドレスに書き込まれる（Ｓ６３６）。また、システム・エリアのＮＯＡが１だけ加算され、ＥＥＰＲＯＭ１６に格納されているアプリケーション・プログラムが１つ増えたことが記録される（Ｓ６３８）。最後に、アプリケーション・プログラムが正常に終了した旨のステータスが、ＲＡＭ１４の所定領域にレスポンス情報として編集され（Ｓ６４０）、Application Loadコマンド処理が終了される。
【００４６】
図７は、ステップ５１２の処理内容、つまり、Selectコマンドが受信された場合にＣＰＵ１８が実行する処理内容を示す流れ図である。
ステップ５１２において、ＣＰＵ１８は、はじめに変数seach ＿address をアプリケーション・プログラムが格納されている領域の先頭アドレスに初期設定する（Ｓ７０２）。本実施形態の場合には、search＿address は、Ｈ’６０１０に設定される。
【００４７】
次に、ＣＰＵ１８は、ＥＥＰＲＯＭ１６のシステムエリアよりＮＯＡの値を読み出し（Ｓ７０４）、その値をもって変数counter を設定する。例えば図３に示すようにＥＥＰＲＯＭ１６が２つのアプリケーション・プログラムを格納している場合には、counter は２に初期設定される。
【００４８】
次に、ＣＰＵ１８は、Selectコマンドに指定されたアプリケーション・プログラムと同一のものがあるか否かについて、ＥＥＰＲＯＭ１６に格納されているアプリケーション・プログラムを順次検索する（Ｓ７０８〜Ｓ７１６）。具体的には、search＿address が示すアドレスのａｎ＿１及びそのａｎ＿１に続く
application ＿nameと、Selectコマンドのａｎ＿１及びapplication ＿nameとが比較される（Ｓ７１０）。比較の結果、一致しない場合には、counter の値を１だけデクリメントするとともに、search＿address にＮＡ＿ＡＤＤの内容を代入する（Ｓ７１４、Ｓ７１６）。ここで、ステップ７１６におけるＮＡ＿ＡＤＤは、ステップ７１０においてsearch＿address が示したアドレス以降に現れる最初のＮＡ＿ＡＤＤである。ステップ７１６においてsearch＿address の内容を更新することにより、search＿address は、次に格納されているアプリケーション・プログラムの先頭アドレスを示すこととなる。
【００４９】
ステップ７１０から７１６までの処理は、ステップ７１２において比較されたデータが一致するまで、又は、ステップ７０８においてcounter の値が０となるまで継続される。
ステップ７１２において、比較されたデータが一致した場合（Ｓ７１２：Ｙｅｓ）には、Selectコマンドによって指定されたアプリケーション・プログラムが発見され、search＿address はその先頭アドレスを示していることが意味される。そこで、ＣＰＵ１８は、search＿address にａｎ＿１の長さ（バイト数）及びａｎ＿１が示す値、すなわちapplication ＿nameの長さ（バイト数）を加算する（Ｓ７１８）。この結果、search＿address は当該アプリケーション・プログラムにおけるapplication program の先頭アドレスを示すこととなる。ＣＰＵ１８は、このsearch＿address の内容をＲＡＭ１４上の所定領域に格納する（Ｓ７２０）。そして、Searchコマンドの処理が正常に終了した旨のステータスをＲＡＭ１４の所定領域にレスポンス情報として格納し（Ｓ７２２）、その処理を終了する。
【００５０】
一方、ステップ７０８において、counter の値が０となった場合（Ｓ７０８：Ｙｅｓ）には、ＥＥＰＲＯＭ１６に格納されているいずれのアプリケーション・プログラムもSelectコマンドが指定するものに該当しなかったことが意味される。この場合には、ＣＰＵ１８は、該当するアプリケーション・プログラムがなかった旨のエラーステータスをＲＡＭ１４の所定領域にレスポンス情報として格納し（Ｓ７２４）、処理を終了する。
【００５１】
図８は、図５のステップ５１６においてＣＰＵ１８が実行する処理内容を示す流れ図である。
図５のステップ５１４において、アプリケーションが選択済みであると判断されると、ＣＰＵ１８は、図７のステップ７２２においてＲＡＭ１４に格納されたsearch＿address の内容を取得し、それに示されるアドレスをサブルーチンコールする。これにより、Selectコマンドにより選択されたアプリケーション・プログラムが実行される。
【００５２】
以上説明したように、本実施形態では、ＥＥＰＲＯＭ１６のシステムエリアに、格納されているアプリケーション・プログラムの個数を示す変数ＮＯＡを格納することとした。また、本実施形態では、アプリケーション・プログラムをＥＥＰＲＯＭ１６に格納するときには、次のアプリケーション・プログラムが格納されるべきメモリ領域の先頭アドレスを示すデータＮＡ＿ＡＤＤを当該アプリケーション・プログラムとともに、換言すれば、当該アプリケーション・プログラムと関連づけてＥＥＰＲＯＭ１６に格納することとした。
【００５３】
これにより、本実施形態は、変数search＿address に、格納されている各アプリケーション・プログラムが有するＮＡ＿ＡＤＤを順に代入してsearch＿address の内容を更新することにより、各アプリケーション・プログラムの先頭アドレスを順次特定することが可能となっている。また、上記search＿address の更新をＮＯＡに示される回数だけ行うことにより、次にアプリケーション・プログラムを格納することができる領域の先頭アドレスを特定することも可能となっている。ここで、本実施形態は、特にＮＡ＿ＡＤＤを用いてsearch＿address を更新し、アプリケーション・プログラムの先頭アドレスを特定することとしているので、先頭アドレスが迅速に特定される。
【００５４】
また、本実施形態は、上記のように次にアプリケーション・プログラムを格納することができる領域の先頭アドレスを特定できることから、２以上の任意の長さ（バイト数）のアプリケーション・プログラムをＥＥＰＲＯＭ１６に格納することが可能となっている。しかも、本実施形態では、新たなアプリケーション・プログラムを、その直前に格納されたアプリケーション・プログラムの直後に書き込むこととしているので、限られたＥＥＰＲＯＭ１６のメモリを効率的に利用することを可能としている。
【００５５】
また、各アプリケーション・プログラムの先頭アドレスを順次特定できることから、格納された複数のアプリケーション・プログラムを検索し、その中から所定のものを選択してそのアドレスを特定すること、さらに、特定されたアドレスを用いて、所定のアプリケーションプログラムを実行することが可能となっている。
【００５６】
また、本実施形態では、上記search＿address を更新する回数をＮＯＡを用いて制限することとしている。これにより、本実施形態では、アプリケーション・プログラムを検索する場合に、アプリケーション・プログラムが格納されていない領域までも検索し、無益に検索時間が増大することを防止している。
一方、新たにアプリケーション・プログラムを格納する場合には、search＿addresの更新は、必ずＮＯＡに示される回数だけ行われる。よって、本実施形態では、新しいアプリケーション・プログラムが既に格納されていたものに上書きされ、その結果既存のアプリケーション・プログラムが損なわれることが防止されている。
【００５７】
（その他の実施形態）
なお、本発明は、上記実施形態に限定されるものではない。上記実施形態は、例示であり、本発明の特許請求の範囲に記載された技術的思想と実質的に同一な構成を有し、同様な作用効果を奏するものは、いかなるものであっても本発明の技術的範囲に包含される。
【００５８】
例えば、上記実施形態において、ＮＡ＿ＡＤＤは必須の要件ではなく、ＮＡ＿ＡＤＤを用いずに同様の効果を得ることも可能である。
例えば、search＿address の更新は、search＿address にａｎ＿１の長さ、ａｎ＿１の示すapplication ＿nameの長さ、ａｐｌ＿１の長さ、及びａｐｌ＿１の示すapplication program の長さを加算すること、すなわち、アプリケーション・プログラムが消費しているメモリ容量をsearch＿address に加算することであっても、上記実施形態と同様の効果を得ることが可能である。
【００５９】
また、あらかじめ１つのアプリケーション・プログラムが占有しうるメモリ領域の大きさを定め、search＿address の更新は、その定められたメモリ容量の大きさをsearch＿address に加算することであっても、２以上のアプリケーション・プログラムをＥＥＰＲＯＭ１６に格納すること等の効果を取得することが可能である。
【００６０】
なお、本明細書において、「ＩＣカード」とは、ＣＰＵと、このＣＰＵによってアクセスされるメモリとを備え、ＣＰＵは、そのメモリに格納されているプログラムにしたがい動作する携帯可能な情報記録媒体を意味する。したがって、「ＩＣカード」は、例えばその形状が平面的かつ四角形であるいわゆるカード状に限定されるものではなく、コイン形状等の媒体にＣＰＵ及びメモリを備えたものであってもよい。
【００６１】
【発明の効果】
以上詳しく説明したように、本発明によれば、不揮発性メモリに、２以上のアプリケーション・プログラムを格納することが可能となった。
【００６２】
また、本発明によれば、不揮発性メモリに１又は２以上のアプリケーション・プログラムが格納されている場合に、それらアプリケーション・プログラムから特定のものを検索することが可能となった。
【図面の簡単な説明】
【図１】本発明に係るＩＣカードの構成を示す図である。
【図２】本発明に係るＩＣカードの各メモリーに割り付けられているアドレスの一例を示す図である。
【図３】ＥＥＰＲＯＭ１６のメモリ・マップを示す図である。
【図４】  Application Loadコマンド、及びSelectコマンドのフォーマットを示す図である。
【図５】ＲＯＭ１２に格納されている汎用プログラムの流れ図である。
【図６】  Application Loadコマンドが受信された場合にＣＰＵ１８が実行する処理内容を示す流れ図である。
【図７】  Selectコマンドが受信された場合にＣＰＵ１８が実行する処理内容を示す流れ図である。
【図８】図５のステップ５１６においてＣＰＵ１８が実行する処理内容を示す流れ図である。
【符号の説明】
１０  ＩＣカード
１２  ＲＯＭ
１４  ＲＡＭ
１６  ＥＥＰＲＯＭ
１８  ＣＰＵ
【図１】
0003764206.tif 000002
【図２】
0003764206.tif 000003
【図３】
0003764206.tif 000004
【図４】
0003764206.tif 000005
【図５】
0003764206.tif 000006
【図６】
0003764206.tif 000007
【図７】
0003764206.tif 000008
【図８】
0003764206.tif 000009