(57)【要約】【課題】メインプログラムの設計者に負担をかけることなく、レジスタの記録容量以上の箇所にＲＯＭパッチ処理を適用させる。【解決手段】ＲＯＭパッチ装置１００は、レジスタ１２１を備えたＣＰＵ１２０と、ＲＯＭ１１０と、ＲＯＭ１１０に格納されたメインプログラム１１１の修正を必要とするバグプログラムのアドレスとバグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報から構成されたレジスタ設定テーブル１３２が格納されたＲＡＭ１３０とを備え、ＣＰＵ１２０は、メインプログラム１１１の実行中のアドレス範囲を特定するＩＤに関連付けられているテーブルをＲＡＭ１３０から呼び出し、呼び出されたテーブルをレジスタ１２１にレジスタ設定情報１２２として格納し、レジスタ１２１に格納されたレジスタ設定情報１２２に応じてバグプログラムにパッチプログラム１３１を適用させることを特徴とする。【選択図】図１
2008015792.tif 000002
【特許請求の範囲】
【請求項１】
ＲＯＭに格納されたメインプログラムの修正を必要とする箇所（以下、「バグプログラム」という）のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ＲＯＭパッチ処理をおこなうＲＯＭパッチ処理方法において、
前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を前記メモリから呼び出す呼び出し工程と、
前記呼び出し工程によって呼び出されたレジスタ設定情報をプロセッサ内のレジスタに格納する格納工程と、
前記格納工程によって前記レジスタに格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させるパッチ工程と、
を含んだことを特徴とするＲＯＭパッチ処理方法。
【請求項２】
前記格納工程によって前記レジスタに格納されたレジスタ設定情報に関連付けられている識別情報を、スタックとして前記メモリにプッシュするプッシュ工程を含んだことを特徴とする請求項１に記載のＲＯＭパッチ処理方法。
【請求項３】
前記識別情報に関連付けられているレジスタ設定情報を再度呼び出すために前記メインプログラムによりポップ命令があった場合、前記メモリに格納されているスタックを、前記識別情報が最上位となるまでポップするポップ工程を含んだことを特徴とする請求項２に記載のＲＯＭパッチ処理方法。
【請求項４】
前記パッチ工程は、
前記レジスタ格納工程によって格納された前記レジスタ設定情報に実行中のメインプログラムのアドレスに応じて前記メモリから呼び出された前記レジスタ設定情報にバグプログラムのアドレスと、パッチプログラムのアドレスとの対応関係が示されていない場合には、
前記バグプログラムに前記パッチプログラムを適用させないことを特徴とする請求項１〜４のいずれか一つに記載のＲＯＭパッチ処理方法。
【請求項５】
レジスタを備えたプロセッサと、
メインプログラムが格納されたＲＯＭと、
メインプログラムの修正を必要とする箇所（以下、「バグプログラム」という）のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報と、前記パッチプログラムとが格納されたメモリとを備え、
前記プロセッサは、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を呼び出しで、前記レジスタに格納し、格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させることを特徴とするＲＯＭパッチ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＲＯＭに格納されたメインプログラムの修正を必要とする箇所（以下、「バグプログラム」という）のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ＲＯＭパッチ処理をおこなうＲＯＭパッチ処理方法およびＲＯＭパッチ装置に関する。
【背景技術】
【０００２】
従来、情報処理装置のＲＯＭに格納された所定の処理を実行させるプログラム（以下、「メインプログラム」という）に不備が発見された場合、ＲＯＭは読み出し専用の記録素子であるため、一度プログラムが書き込まれると、ＲＯＭ自体を交換しなければならなかった。
【０００３】
このような、ＲＯＭに格納されたメインプログラムの修正サポート技術として、ＲＯＭパッチ処理が用いられている。ＲＯＭパッチ処理とは、ＲＯＭに格納されているメインプログラム内のバグプログラムに替わり、メインプログラムが正常に機能するように修正されたプログラムを実行させる技術である（たとえば、下記特許文献１参照。）。また、メインプログラムが正常に機能するように修正されたプログラムを、「パッチプログラム」という。
【０００４】
このパッチプログラムは、あらかじめＲＡＭなどの不揮発性メモリにダウンロードされている。ＲＯＭから読み出されたメインプログラムが順次実行され、バグプログラム部分の実行にさしかかると、不揮発性メモリからパッチプログラムが読み出され、バグプログラムに替わって実行される。
【０００５】
このように、ＲＯＭパッチ処理を用いることにより、ＲＯＭに格納されているメインプログラム自体を修正することなく、正しい動作を実行させることができる。したがって、ＲＯＭとパッチプログラムが格納された不揮発性メモリとをあわせて提供すれば、メインプログラムに不備が発見されたＲＯＭであっても、あらたに作り直すことなく、そのまま利用することができる。
【０００６】
上述のようなＲＯＭパッチ処理を実現する装置として、たとえば、パッチアドレス一致検出装置と、バス切替装置と、パッチプログラムが格納されたＲＡＭや不揮発性メモリに該当するパッチデータ格納装置とを備えたＲＯＭパッチ装置が開示されている（たとえば、下記特許文献２参照。）。
【０００７】
特許文献２に記載のＲＯＭパッチ装置では、パッチアドレス一致検出装置が、現在実行中のメインプログラムのパッチアドレス（バグプログラム部分のアドレス）への移行を検出すると、バス切替装置が、プログラムの読み出し元を、メインプログラムが格納されているＲＯＭからパッチプログラムが格納されているパッチデータ格納装置に切り替える。そして、該当するパッチプログラムの読み出しおよび実行を制御する。
【０００８】
また、パッチデータ格納装置にはレジスタが備えられ、レジスタには、パッチアドレスと、当該パッチアドレスがあらわすバグプログラムに替わる修正プロフラムのアドレスとが組になって記録されている。
【０００９】
【特許文献１】特開平１−１６９６２９号公報
【特許文献２】特開平４−３７３０２１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、上記特許文献２など、従来のＲＯＭパッチ装置の場合、ＲＯＭパッチ装置の能力すなわち、何箇所のバグプログラムに適切にＲＯＭパッチ処理をおこなえるかは、上述したレジスタの記録容量に左右されてしまう。
【００１１】
具体的に説明すると、レジスタには、バグプログラムのアドレスと、当該バグプログラムのパッチプログラムのアドレス（ＲＡＭや不揮発性メモリ上のアドレス）とが組になって格納されている。当然のことながらレジスタには記録容量に応じた組数の情報しか格納することはできない。また、レジスタは、高価であるため、一般的には必要最低限の記録容量しか備えられていない。
【００１２】
したがって、レジスタに格納可能な組数以上の修正箇所が発生してしまった場合には、レジスタにパッチプログラムのアドレスを記録しきれず、バグプログラムがそのまま実行されてしまう、あるいはブレークが発生してしまうなど、メインプログラムが正しく実行されないという問題があった。
【００１３】
また、近年、メインプログラムにあらかじめレジスタへの格納内容を切り替える処理を組み込むことにより、レジスタに格納可能な組数以上の修正箇所にＲＯＭパッチ処理を適用できるようにする技術も開示されている。
【００１４】
このような切り替え処理をおこなうには、少なくとも、メインプログラムの実行状況を監視してレジスタの格納内容の呼び出し処理や、切り替えた内容を再び元の格納内容に戻すための呼び戻し処理など、メインプログラム本来の処理とは無関係の処理を追加しなければならない。したがって、メインプログラム本来の品質を維持するには、追加した処理が正常に動作するか、メインプログラムの動作に変化はないかなどを検証する必要があり、設計者に負担がかかってしまうという問題があった。
【００１５】
また、切り替え処理は、メインプログラムの中のＲＯＭパッチ処理の適用が想定される箇所にあらかじめ書き込んでおかなければならない。したがって、想定外の箇所にバグプロラムが発見された場合にはＲＯＭパッチ処理を適用させることができないという問題があった。
【００１６】
この発明は、上述した従来技術による問題点を解消するため、メインプログラムの設計者に負担をかけることなく、レジスタの記録容量以上の箇所にＲＯＭパッチ処理を適用させることができるＲＯＭパッチ処理方法およびＲＯＭパッチ装置を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上述した課題を解決し、目的を達成するため、この発明にかかるＲＯＭパッチ処理方法は、ＲＯＭに格納されたメインプログラムの修正を必要とする箇所（以下、「バグプログラム」という）のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ＲＯＭパッチ処理をおこなうＲＯＭパッチ処理方法において、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を前記メモリから呼び出す呼び出し工程と、前記呼び出し工程によって呼び出されたレジスタ設定情報をプロセッサ内のレジスタに格納する格納工程と、前記格納工程によって前記レジスタに格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させるパッチ工程と、を含んだことを特徴とする。
【００１８】
この発明によれば、実行中のメインプログラムのアドレス範囲に応じてレジスタ設定情報が切り替わる。したがって、実行中のメインプログラムの中のバグプログラムに対応したパッチプログラムを適用させ、不備のない正常なメインプログラムを実行させることができる。
【００１９】
また、上記発明において、さらに、前記格納工程によって前記レジスタに格納されたレジスタ設定情報に関連付けられている識別情報を、スタックとして前記メモリにプッシュするプッシュ工程を含んでもよい。
【００２０】
この発明によれば、レジスタに格納されたレジスタ設定情報に関連付けられている識別情報をスタックとしてメモリにプッシュすることにより、レジスタに格納したレジスタ設定情報の履歴を記録させることができる。
【００２１】
また、上記発明において、さらに、前記識別情報に関連付けられているレジスタ設定情報を再度呼び出すために前記メインプログラムによりポップ命令があった場合、前記メモリに格納されているスタックを、前記識別情報が最上位となるまでポップするポップ工程を含んでもよい。
【００２２】
この発明によれば、プッシュ工程により、記録されたレジスタ設定情報の格納履歴を用いて、過去にレジスタに格納したレジスタ設定情報を容易に呼び戻すことができる。
【００２３】
また、上記発明によれば、さらに、前記パッチ工程は、前記レジスタ格納工程によって格納された前記レジスタ設定情報に実行中のメインプログラムのアドレスに応じて前記メモリから呼び出された前記レジスタ設定情報にバグプログラムのアドレスと、パッチプログラムのアドレスとの対応関係が示されていない場合には、前記バグプログラムに前記パッチプログラムを適用させないようにしてもよい。
【００２４】
この発明によれば、メインプログラムの中のバグプログラム部分にのみ、パッチプログラムを適用させることができる。
【００２５】
また、上述した課題を解決し、目的を達成するため、この発明にかかるＲＯＭパッチ装置は、レジスタを備えたプロセッサと、メインプログラムが格納されたＲＯＭと、メインプログラムの修正を必要とする箇所（以下、「バグプログラム」という）のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報と、前記パッチプログラムとが格納されたメモリとを備え、前記プロセッサは、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を呼び出しで、前記レジスタに格納し、格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させることを特徴とする。
【００２６】
この発明によれば、実行中のメインプログラムのアドレス範囲に応じてレジスタ設定情報が切り替わる。したがって、実行中のメインプログラムの中のバグプログラムに対応したパッチプログラムを適用させ、不備のない正常なメインプログラムを実行させることができる。
【発明の効果】
【００２７】
本発明にかかるＲＯＭパッチ処理方法およびＲＯＭパッチ装置によれば、メインプログラムのアドレス範囲に応じた呼び出し命令を組み込んでおくことにより、メインプログラムの設計者に負担をかけることなく、レジスタの記録容量以上の箇所にＲＯＭパッチ処理を適用させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００２８】
以下に添付図面を参照して、この発明にかかるＲＯＭパッチ処理方法およびＲＯＭパッチ装置の好適な実施の形態を詳細に説明する。
【００２９】
（実施の形態）
（ＲＯＭパッチ装置の構成）
まず、本発明の実施の形態にかかるＲＯＭパッチ装置の構成を説明する。ＲＯＭパッチ装置は、上述したように、パーソナル・コンピュータや携帯電話機などの情報処理装置の構成の一部を用いて実現される。したがって、本実施の形態では情報処理装置の構成のうち、ＲＯＭパッチ装置にかかる構成のみを抽出した図面を用いて説明する。
【００３０】
図１は、本発明の実施の形態にかかるＲＯＭパッチ装置のハードウェア構成を示すブロック図である。図１のように、ＲＯＭパッチ装置１００は、ＲＯＭ１１０と、プロセッサとしてのＣＰＵ１２０と、メモリとしてのＲＡＭ１３０とを含んで構成されている。なお、ＲＡＭ１３０は、書き込み可能な記録素子の一例であり、ＲＡＭ１３０に替わりフラッシュメモリなど、他の不揮発性の記録素子を用いてもよい。
【００３１】
ＲＯＭ１１０は、読み出し専用の記録素子であり、本実施の形態では、メインプログラム１１１が格納されている。メインプログラム１１１とは、ＲＯＭパッチ装置１００が搭載された情報処理装置に所定の動作をおこなわせるためのプログラムである。ＲＯＭ１１０に格納されたメインプログラム１１１は、後述するＣＰＵ１２０の指示に応じて読み出され、実行される。
【００３２】
また、一般的にメインプログラム１１１がＲＯＭ１１０に書き込まれた後に、メインプログラム１１１の中から修正を必要とするバグプログラムが発見される。しかしながらＲＯＭ１１０は、上述したように読み出し専用の記録素子であるため、バグプログラムを直接書き換えることはできない。
【００３３】
したがって、メインプログラム１１１の中からバグプログラムが発見された場合には、メインプログラム１１１の開発元などから、バグプログラムのアドレスおよびバグプログラムに対応したパッチプログラムが提供される。
【００３４】
メインプログラムには、上述のような後から提供されたパッチプログラムをバグプログラムに替わって実行させるために、あらかじめ、アドレスに応じた呼び出し命令が組み込まれている。読み出し命令とは、ＣＰＵ１２０が読み出しをおこなうメインプログラムのアドレスに応じて、あらかじめ指定された動作をあわせて実行させるように組み込まれた処理である。
【００３５】
具体的には、たとえば、メインプログラムのアドレス「１〜５」を読み出す際には、呼び出し命令「Ａ」をあわせて実行させる。続いてアドレス「６〜１０」を読み出す際には、呼び出し命令「Ｂ」をあわせて実行させる。呼び出される命令は、具体的には「パッチプッシュ呼び出し」、「パッチポップ呼び出し」が用いられる。これらの呼び出し命令の詳細については後述する。
【００３６】
なお、呼び出し命令は、メインプログラムの読み出しに付随して組み込まれているため、呼び出し命令「Ａ」の後には呼び出し命令「Ｂ」をおこなうなど呼び出し命令同士の関係は設定しない。したがって、呼び出し命令は、処理の内容や実行順序を考慮せずに容易にメインプログラムに組み込むことができる。
【００３７】
ＣＰＵ１２０は、クロック信号を生成し、生成したクロック信号に応じて、ＲＯＭ１１０からメインプログラム１１１を読み出して実行する。また、ＣＰＵ１２０には、レジスタ１２１が備えられており、レジスタ１２１に格納する情報を制御する。
【００３８】
レジスタ１２１は、ＣＰＵ１２０の処理に必要な情報を高速アクセス可能に格納する記録素子である。本実施の形態においては、レジスタ１２１は、ＲＯＭ１１０に格納されたメインプログラム１１１の中のバグプログラムのアドレスと、ＲＡＭ１３０に格納されている当該バグプログラムのパッチプログラムのアドレスとが組になったレジスタ設定情報１２２を格納する。
【００３９】
なお、一般的にレジスタは、動作が極めて高速だが、高価であり、必要最低限の記録容量を有した構成によって実装されていることが多い。したがって、本実施の形態のレジスタ１２１も、一般的なレジスタの記録容量を考慮して４組のレジスタ設定情報１２２が格納可能な記録容量を備えた記録素子として、以下説明をおこなう。
【００４０】
レジスタ１２１に格納されているレジスタ設定情報１２２は、ＣＰＵ１２０がメインプログラム１１１を読み出す際に常に参照される。すなわち、ＣＰＵ１２０によるレジスタ１２１に格納されているレジスタ設定情報１２２の参照結果が、ＲＯＭパッチ装置１００において、ＲＯＭパッチ処理をおこなう際のトリガとなる。
【００４１】
具体的には、ＣＰＵ１２０がこれから読み出すメインプログラム１１１のアドレスが、レジスタ１２１に格納されているレジスタ設定情報１２２のバグプログラムのアドレスと一致するか否かを判断する。
【００４２】
一致しなかった場合は、そのままメインプログラム１１１を読み出して実行させる。一方、一致した場合は、レジスタ１２１に格納されているレジスタ設定情報１２２の中のバグプログラムと組に格納されているパッチプログラムのアドレスを参照し、ＲＡＭ１３０からパッチプログラムを読み出して実行させる。
【００４３】
なお、上述したようにレジスタ１２１には４組までのレジスタ設定情報１２２しか格納できない。そのためにレジスタ１２１の格納内容が固定されている場合は、メインプログラム１１１の中の４箇所のバグプログラムに対してしかＲＯＭパッチ処理を適用させることができない。
【００４４】
したがって、ＣＰＵ１２０が読み出すメインプログラム１１１のアドレスにあわせて、適宜レジスタ１２１にあらたなレジスタ設定情報１２２を格納させることにより、５箇所以上のバグプログラムにＲＯＭパッチ処理を適用させることができる。このような、適宜レジスタ１２１にあらたなレジスタ設定情報１２２を格納させるために、本実施の形態では、メインプログラム１１１に組み込まれている呼び出し命令を利用する。
【００４５】
具体的には、後述するＲＡＭ１３０に複数のレジスタ設定情報を格納しておく。そして、ＣＰＵ１２０がメインプログラム１１１を読み出すと、同時に設定された呼び出し命令も実行される。この呼び出し命令を、ＲＡＭ１３０からメインプログラム１１１のアドレスに対応したレジスタ設定情報を呼び出し、レジスタ１２１に格納するような処理に設定しておく。
【００４６】
ＲＡＭ１３０は、半導体を利用した記録素子であり、ＲＯＭ１１０と異なり、格納内容の更新が可能である。このＲＡＭ１３０には、ＲＯＭパッチ処理をおこなうために必要なパッチプログラム１３１と、レジスタ設定テーブル１３２と、レジスタ設定テーブルスタック１３３との３種類の情報が格納されている。
【００４７】
パッチプログラム１３１は、メインプログラム１１１の中のバグプログラムの修正プログラムである。このパッチプログラム１３１を読み出すことにより、メインプログラム１１１によって本来実行されるはずであった処理が正確におこなわれるようになる。パッチプログラム１３１は、ＲＯＭ１１０の説明の際に記載したようにメインプログラム１１１の提供元などの外部からバグプログラムのアドレスとともに提供され、ＲＡＭ１３０に格納されている。
【００４８】
レジスタ設定テーブル１３２は、レジスタ１２１に格納するレジスタ設定情報１２２を４組ずつにまとめて格納されたテーブルによって構成されている。レジスタ設定テーブル１３２には、上述のようなテーブルが複数個格納されている。これらのテーブルは、バグプログラムの有無にかかわらず、あらかじめ、メインプログラム１１１のアドレス範囲ごとに用意されている。
【００４９】
アドレス範囲ごととは、たとえは、「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」に対応したテーブル、「０ｘ０ＡＡＡＡ０〜０ｘ０ＤＤＤＤＦ」に対応したテーブルなどの設定である。また、レジスタ設定テーブル１３２に格納されている各テーブルにはそれぞれを識別するためのＩＤ（識別符号）が付与されている。
【００５０】
各テーブルに付与されたＩＤは、メインプログラム１１１の読み出しの際の呼び出し命令の実行に用いられる。具体的には、呼び出し命令として、後述するパッチプッシュ呼び出し（詳しくはレジスタ設定テーブルスタック１３３の説明とともに後述する）が組み込まれている場合、テーブルのＩＤがパッチプッシュ呼び出しの引数として用いられる。パッチプッシュ呼び出しは、引数のＩＤに応じてレジスタ設定テーブル１３２からメインプログラム１１１のアドレス範囲に対応したテーブルを読み出し、レジスタ１２１に格納する。
【００５１】
なお、レジスタ設定テーブル１３２の各テーブルは、パッチプログラム提供前には、レジスタ設定情報は格納されていない。このようなレジスタ設定情報が格納されていないテーブルが呼び出された場合は、レジスタ１２１にもレジスタ設定情報は格納されない。したがって、ＣＰＵ１２０がこれから読み出すメインプログラム１１１のアドレスが、レジスタ１２１に格納されているレジスタ設定情報１２２のバグプログラムのアドレスと一致するか否かを判断しても、一致するアドレスは存在しないため、メインプログラム１１１がそのまま実行される。
【００５２】
バグプログラムが発見されると、外部からバグプログラムのアドレスと、パッチプログラム１３１とが提供される。提供されたバグプログラムのアドレスと、パッチプロラム１３１のアドレスとからレジスタ設定情報が生成され、バグプログラムのアドレスに対応したＩＤのテーブルに格納される。バグプログラムが発見され、外部からバグプログラムのアドレスと、パッチプログラム１３１とが提供されるたびに、レジスタ設定情報が生成され、バグプログラムのアドレスに対応したＩＤのテーブルに格納される。
【００５３】
ここで、図２を用いて、レジスタ設定テーブル１３２の構成を具体的に説明する。図２は、ＲＡＭに格納されているレジスタ設定テーブルの構成の一例を示す説明図である。図２には一例として、レジスタ設定テーブル１３２に２組のテーブル１３２ａ，１３２ｂが格納されている場合を示している。各テーブル１３２ａ，１３２ｂは、メインプログラム１１１のアドレス範囲ごとに４組のレジスタ設定情報１２２を格納した構成になっている。
【００５４】
たとえば、図２のレジスタ設定テーブル１３２に示したテーブル１３２ａは、ＩＤ：０１が付与されており、メインプログラム１１１のアドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」に対応している。すなわち、ＣＰＵ１２０によってメインプログラム１１１のアドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」が読み出されていると、あらかじめ組み込まれた呼び出し命令がＩＤ：０１のテーブル１３２ａを読み出し、読み出したテーブル１３２ａをレジスタ１２１に格納させる。
【００５５】
また、図２のレジスタ設定テーブル１３２に示したテーブル１３２ｂは、ＩＤ：０２が付与されており、メインプログラム１１１のアドレス範囲「０ｘ０ＡＡＡＡ０〜０ｘ０ＤＤＤＤＦ」に対応している。すなわち、ＣＰＵ１２０によってメインプログラム１１１のアドレス範囲「０ｘ０ＡＡＡＡ０〜０ｘ０ＤＤＤＤＦ」が読み出されると、あらかじめ組み込まれた呼び出し命令がＩＤ：０２のテーブル１３２ｂを読み出し、読み出したテーブル１３２ｂをレジスタ１２１に格納させる。
【００５６】
すなわち、レジスタ設定テーブル１３２を備え、また、レジスタ設定テーブル１３２にＩＤを付与したテーブルを格納することにより、常にＣＰＵ１２０が実行中のメインプログラム１１１のアドレス範囲に対応したレジスタ設定情報１２２をレジスタ１２１に格納させ、ＲＯＭパッチ処理を適用させることができる。
【００５７】
レジスタ設定テーブルスタック１３３は、呼び出し命令に応じて上述したレジスタ設定テーブル１３２に格納されている各テーブル（たとえば、テーブル１３２ａ，１３２ｂ）のＩＤをスタックとして格納する。スタックとは、ＬＩＦＯ（Ｌａｓｔ  Ｉｎ，Ｆｉｒｓｔ  Ｏｕｔ）と呼ばれるデータの入出力方式によって扱われるデータである。ＬＩＦＯは、積み重ねた書類の上から処理するように、最後に格納した最上位のデータを、最初に読み出す入出力方式である。
【００５８】
レジスタ設定テーブルスタック１３３は、ＩＤをスタックとして格納することにより、レジスタ１２１に格納した過去のレジスタ設定情報を容易に復帰させることができる。このような復帰処理をおこなう場合にも、メインプログラム１１１にあらかじめ組み込まれている呼び出し命令を利用する。
【００５９】
ここで、上述したような呼び出し命令について具体的に説明する。呼び出し命令には、パッチプッシュ呼び出しと、パッチポップ呼び出しとがあり、メインプログラム１１１の実行の際のアドレスの流れに応じて適宜組み込まれている。
【００６０】
パッチプッシュ呼び出しとは、レジスタ１２１にあらたなレジスタ設定情報１２２を格納するための処理である。このパッチプッシュ呼び出しによって具体的には、以下の２つの処理がおこなわれる。
【００６１】
まず、パッチプッシュ呼び出しに設定された引数（テーブルのＩＤ）を参照して、レジスタ設定テーブル１３２からテーブルを呼び出し、呼び出したテーブルのレジスタ設定情報１２２をレジスタ１２１に格納する。そして、レジスタ設定テーブルスタック１３３に呼び出したテーブルのＩＤを格納する。すなわち、レジスタ設定テーブルスタック１３３の最上位に格納されているＩＤは、現在レジスタ１２１に格納されているレジスタ設定情報１２２を備えたテーブルのＩＤをあらわすこととなる。
【００６２】
一方、パッチポップ呼び出しとは、レジスタ１２１のレジスタ設定情報１２２を１つ前のパッチプッシュ呼び出しによって格納したレジスタ設定情報１２２の内容に戻すための処理である。パッチポップ呼び出しは、具体的には、メインプログラム１１１の読み出し順序の中で、一度読み出したアドレス範囲に戻り、再度読み出すような場合に用いられる呼び出し命令である。
【００６３】
具体的には、以下の２つの処理がおこなわれる。まず、レジスタ設定テーブルスタック１３３の最上位に格納されているＩＤを取り出す。１回のパッチポップ呼び出しにつき、１つのＩＤが取り出される。そして、レジスタ１２１は、あたらしく最上位に格納されたＩＤのテーブルをレジスタ設定テーブル１３２から読み出し、レジスタ設定情報１２２を格納する。すなわち、レジスタ１２１の格納内容を１つ前におこなわれたパッチプッシュ呼び出しによって格納されたレジスタ設定情報１２２に戻すことができる。
【００６４】
以上説明したような構成を備えることにより、ＲＯＭパッチ装置１００は、メインプログラム１１１に組み込まれた呼び出し命令を利用して、バグプログラムの発見箇所、アドレスにかかわらず、ＲＯＭパッチ処理を適用させることができる。
【００６５】
（ＲＯＭパッチ装置のＲＯＭパッチ処理内容）
つぎに、上述したような構成を備えたＲＯＭパッチ装置１００がＣＰＵ１２０によるメインプログラム１１１の読み出しに応じて実行されるＲＯＭパッチ処理内容について説明する。ここでは、メインプログラム１１１の開始時と、メインプログラム１１１に組み込まれた呼び出し命令に応じて実行されるパッチプッシュ呼び出し時およびパッチポップ呼び出し時の処理についてそれぞれ説明をおこなう。
【００６６】
＜メインプログラム開始時＞
まず、ＲＯＭパッチ装置１００が搭載された情報処理装置において、メインプログラム１１１が開始される際のＲＯＭパッチ装置１００の処理内容について具体的に説明する。図３は、プログラム開始時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。ＣＰＵ１２０によってメインプログラム１１１の開始が指示されると、図３のように、ＲＯＭパッチ装置１００のレジスタ１２１と、レジスタ設定テーブルスタック１３３とは、初期状態にリセットされる。
【００６７】
初期状態とは具体的には、レジスタ１２１のレジスタ設定情報１２２が、値なしをあらわす「０ｘ００００００」に設定され、レジスタ設定テーブルスタック１３３が、テーブルのＩＤを格納していないよう、格納内容を０に設定される情報をあらわす。ＲＯＭパッチ装置１００は、上述のような初期状態に設定された後、ＣＰＵ１２０によるメインプログラム１１１の読み出しに応じて、ＲＯＭパッチ処理を適用させるための動作を開始させる。
【００６８】
＜パッチプッシュ呼び出し時＞
つぎに、パッチプッシュ呼び出しがおこなわれた際のＲＯＭパッチ装置の処理内容について具体的に説明する。上述したように、パッチプッシュ呼び出しは、メインプログラム１１１に組み込まれている。したがって、ＣＰＵ１２０が、パッチプッシュ呼び出しが組み込まれたメインプログラム１１１のアドレス範囲を読み込むと、パッチプッシュ呼び出しが実行される。
【００６９】
図４および図５は、パッチプッシュ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。図４は、ＣＰＵ１２０がメインプログラム１１１のアドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」を読み出した際にメインプログラム１１１に組み込まれていたパッチプッシュ呼び出しの状態をあらわしている。
【００７０】
また、図５は、ＣＰＵ１２０が、メインプログラム１１１のアドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」を読み出た後、続いて、アドレス範囲「０ｘ０ＡＡＡＡ０〜０ｘ０ＤＤＤＤＦ」を読み出した際、メインプログラム１１１に組み込まれていたパッチプッシュ呼び出しの状態をあらわしている。
【００７１】
図４，５を用いてＣＰＵ１２０によって読み出されるメインプログラム１１１のアドレスに沿って順に説明すると、まず、ＣＰＵ１２０がアドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」を読み出すと、図４のように、パッチプッシュ呼び出しがおこなわれる。このパッチプッシュによって、アドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」の引数であるテーブル１３２ａのＩＤ：０１が参照され、レジスタ１２１にはテーブル１３２ａのレジスタ設定情報１２２が格納される。また、レジスタ設定テーブルスタック１３３にはＩＤ：０１が格納される。
【００７２】
続いて、ＣＰＵ１２０によるメインプログラム１１１の読み出し処理が進み、アドレス範囲「０ｘ０ＡＡＡＡ０〜０ｘ０ＤＤＤＤＦ」を読み出すと、図５のように、パッチプッシュ呼び出しがおこなわれる。このパッチプッシュ呼び出しによって、アドレス範囲「０ｘ０ＡＡＡＡ０〜０ｘ０ＤＤＤＤＦ」の引数であるテーブル１３２ｂのＩＤ：０２が参照され、レジスタ１２１にはテーブル１３２ｂのレジスタ設定情報１２２が格納される。また、レジスタ設定テーブルスタック１３３にはＩＤ：０２が格納される。
【００７３】
図６は、パッチプッシュ呼び出し処理の手順を示すフローチャートである。上述した図４および図５のいずれの場合も、パッチプッシュ呼び出しは、図６のような処理手順により実行される。図６のフローチャートにおいて、まず、メインプログラム１１１の読み出しによって、呼び出された命令がパッチプッシュ呼び出しか否かを判断する（ステップＳ６０１）。
【００７４】
ステップＳ６０１において、パッチプッシュ呼び出しがおこなわれるまで待ち（ステップＳ６０１：Ｎｏのループ）、パッチプッシュ呼び出しがおこなわれると（ステップＳ６０１：Ｙｅｓ）、つぎにメインプログラム１１１からパッチプッシュ呼び出しの引数を取得したか否かを判断する（ステップＳ６０２）。
【００７５】
ステップＳ６０２の処理において、引数を取得するまで待ち（ステップＳ６０２：Ｎｏのループ）、引数を取得すると（ステップＳ６０２：Ｙｅｓ）、つぎに引数のＩＤに該当するテーブルからレジスタ設定情報１２２を読み出し、レジスタ１２１に格納する（ステップＳ６０３）。最後に、引数のＩＤをレジスタ設定テーブルスタック１３３にプッシュ（格納）し（ステップＳ６０４）、一連のパッチプッシュ呼び出し処理を終了する。
【００７６】
＜パッチポップ呼び出し時＞
つぎに、メインプログラム１１１の読み出しに応じてパッチポップ呼び出しがおこなわれた際のＲＯＭパッチ装置１００の処理について具体的に説明する。上述したように、パッチポップ呼び出しは、メインプログラム１１１に組み込まれている。したがって、ＣＰＵ１２０が、パッチポップ呼び出しが組み込まれたメインプログラム１１１のアドレス範囲を読み込むと、パッチポップ呼び出しが実行される。
【００７７】
図７は、パッチポップ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。図７のようなパッチポップ呼び出しは、図５のようにＣＰＵ１２０が、メインプログラム１１１のアドレス範囲「０ｘ０ＡＡＡＡ０〜０ｘ０ＤＤＤＤＦ」を読み出した後、再度、アドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」を読み出すような場合に、容易にレジスタ１２１のレジスタ設定情報１２２を変更するために用いられる。
【００７８】
図７は、ＣＰＵ１２０が、メインプログラム１１１のアドレス範囲「０ｘ０１１１１０〜０ｘ０４４４４Ｆ」を読み出し、パッチポップ呼び出しがおこなわれた状態をあらわしている。このパッチポップ呼び出しによって、レジスタ設定テーブルスタック１３３に格納されているＩＤが１つポップ（取り出し）される。
【００７９】
具体的には、テーブル１３２ｂのＩＤ：０２が取り出され、最上位にはテーブル１３２ａのＩＤ：０１が格納された状態となる。また、レジスタ設定テーブルスタック１３３の最上位のＩＤの変更に伴い、レジスタ１２１には、あらたに最上位に格納されているＩＤ：０１を読み出したテーブル１３２ａのレジスタ設定情報１２２が格納される。
【００８０】
図８は、パッチポップ呼び出し処理の手順を示すフローチャートである。上述した図７の場合、パッチポップ呼び出しは図８のような処理手順により実行される。図８のフローチャートにおいて、まず、メインプログラム１１１の読み出しによって、呼び出された命令がパッチポップ呼び出か否かを判断する（ステップＳ８０１）。ここで、パッチポップ呼び出しがおこなわれるまで待ち（ステップＳ８０１：Ｎｏのループ）、パッチポップ呼び出しがおこなわれると（ステップＳ８０１：Ｙｅｓ）、つぎにレジスタ設定テーブルスタック１３３からテーブルのＩＤ（１つ）をポップ（取り出し）する（ステップＳ８０２）。
【００８１】
最後に、レジスタ設定テーブルスタック１３３の最上位のＩＤのテーブルをレジスタ設定テーブル１３２から読み出し、レジスタ１２１に格納し（ステップＳ８０３）、一連のパッチポップ呼び出し処理を終了する。
【００８２】
また、上述したように、パッチプッシュ呼び出しの後にパッチポップ呼び出しをおこなう他に、パッチプッシュ呼び出しを連続しておこなう手順を用いてもよい。具体的には、図７のようにＩＤ：０２のテーブル１３２ｂからＩＤ：０１のテーブル１３２ａへ変更する際に、レジスタ設定テーブルスタック１３３のＩＤ：０２を取り出すのではなく、あらたに、ＩＤ：０１を最上位に格納するようにメインプログラム１１１に設定する。
【００８３】
パッチプッシュ呼び出しを連続しておこなう手順の場合、格納されたＩＤがポップされないため、パッチプッシュ呼び出しが所定の回数以上おこなわれるとレジスタ設定テーブルスタック１３３に格納可能なＩＤがオーバーフローしてしまう。したがって、パッチプッシュ呼び出しを所定回数おこなうたびに、図３のようにレジスタ設定テーブルスタック１３３を初期状態に戻す処理を組み込んでおく。
【００８４】
以上説明したように、本実施の形態にかかるＲＯＭパッチ処理方法およびＲＯＭパッチ装置によれば、メインプログラム１１１のアドレスに対応して呼び出し命令を組み込むことにより、レジスタ１２１には、常に現在実行中のメインプログラム１１１のアドレス範囲に対応したレジスタ設定情報１２２が格納される。このようにレジスタ１２１の格納内容を、メインプログラム１１１の実行にあわせて変化させることにより、バグプログラムがいくつ発見されても、レジスタ１２１の記録容量に依存せずにＲＯＭパッチ処理を適用させることができる。
【００８５】
また、レジスタ設定テーブル１３２には、レジスタ１２１の記録容量に応じて構成されたテーブルが格納されている。本実施の形態においては、テーブルは、４組のレジスタ設定情報１２２によって構成されている。これらのテーブルにＩＤを付与し、このＩＤを引数として呼び出し命令をおこなうことにより、レジスタ１２１は、記録容量を有効に利用することができる。また、テーブルにあらたなレジスタ設定情報１２２を追加するには、アドレス範囲に応じてＩＤを参照すればよい。
【００８６】
したがって、本発明は、メインプログラム１１１にバグプログラムが発見された場合、バグプログラムの箇所の数がいくつであっても、また、発生場所（アドレス）がどこであっても指定した任意の箇所に容易にＲＯＭパッチ処理を適用させることができる。
【００８７】
なお、本実施の形態で説明したＲＯＭパッチ処理方法は、メインプログラムおよびパッチプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このメインプログラムおよびパッチプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な伝送媒体であってもよい。
【００８８】
（付記１）ＲＯＭに格納されたメインプログラムの修正を必要とする箇所（以下、「バグプログラム」という）のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報が格納されたメモリを用いて、ＲＯＭパッチ処理をおこなうＲＯＭパッチ処理方法において、
前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を前記メモリから呼び出す呼び出し工程と、
前記呼び出し工程によって呼び出されたレジスタ設定情報をプロセッサ内のレジスタに格納する格納工程と、
前記格納工程によって前記レジスタに格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させるパッチ工程と、
を含んだことを特徴とするＲＯＭパッチ処理方法。
【００８９】
（付記２）前記格納工程によって前記レジスタに格納されたレジスタ設定情報に関連付けられている識別情報を、スタックとして前記メモリにプッシュするプッシュ工程を含んだことを特徴とする付記１に記載のＲＯＭパッチ処理方法。
【００９０】
（付記３）前記識別情報に関連付けられているレジスタ設定情報を再度呼び出すために前記メインプログラムによりポップ命令があった場合、前記メモリに格納されているスタックを、前記識別情報が最上位となるまでポップするポップ工程を含んだことを特徴とする付記２に記載のＲＯＭパッチ処理方法。
【００９１】
（付記４）前記パッチ工程は、
前記レジスタ格納工程によって格納された前記レジスタ設定情報に実行中のメインプログラムのアドレスに応じて前記メモリから呼び出された前記レジスタ設定情報にバグプログラムのアドレスと、パッチプログラムのアドレスとの対応関係が示されていない場合には、
前記バグプログラムに前記パッチプログラムを適用させないことを特徴とする付記１〜４のいずれか一つに記載のＲＯＭパッチ処理方法。
【００９２】
（付記５）レジスタを備えたプロセッサと、
メインプログラムが格納されたＲＯＭと、
メインプログラムの修正を必要とする箇所（以下、「バグプログラム」という）のアドレスと前記バグプログラムに関するパッチプログラムのアドレスとの対応関係を示したレジスタ設定情報と、前記パッチプログラムとが格納されたメモリとを備え、
前記プロセッサは、前記メインプログラムの実行中のアドレス範囲を特定する識別情報に関連付けられているレジスタ設定情報を呼び出しで、前記レジスタに格納し、格納されたレジスタ設定情報に応じて前記バグプログラムに前記パッチプログラムを適用させることを特徴とするＲＯＭパッチ装置。
【００９３】
（付記６）前記メモリに格納されている前記レジスタ設定情報の容量は、前記レジスタの記録容量以下であることを特徴とする付記５に記載のＲＯＭパッチ装置。
【産業上の利用可能性】
【００９４】
以上のように、本発明にかかるＲＯＭパッチ処理方法およびＲＯＭパッチ装置は、ＲＯＭによって提供された商品に有用であり、特に、マスク化されたメインプログラムのパッチ処理に適している。
【図面の簡単な説明】
【００９５】
【図１】本発明の実施の形態にかかるＲＯＭパッチ装置の構成を示すブロック図である。
【図２】ＲＡＭに格納されているレジスタ設定テーブルの一例を示す説明図である。
【図３】プログラム開始時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。
【図４】パッチプッシュ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図（その１）である。
【図５】パッチプッシュ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図（その２）である。
【図６】パッチプッシュの呼び出し処理の手順を示すフローチャートである。
【図７】パッチポップ呼び出し時のレジスタとレジスタ設定テーブルスタックとの格納内容を示す説明図である。
【図８】パッチポップの呼び出し処理の手順を示すフローチャートである。
【符号の説明】
【００９６】
１００  ＲＯＭパッチ装置
１１０  ＲＯＭ
１１１  メインプログラム
１２０  ＣＰＵ
１２１  レジスタ
１２２  レジスタ設定情報
１３０  ＲＡＭ
１３１  パッチプログラム
１３２  レジスタ設定テーブル
１３３  レジスタ設定テーブルスタック
【図１】
2008015792.tif 000003
【図２】
2008015792.tif 000004
【図３】
2008015792.tif 000005
【図４】
2008015792.tif 000006
【図５】
2008015792.tif 000007
【図６】
2008015792.tif 000008
【図７】
2008015792.tif 000009
【図８】
2008015792.tif 000010