(57)【特許請求の範囲】
【請求項１】
個別の機能を実現する複数の個別プログラム、前記個別プログラムを統括するメインプログラム、前記メインプログラムの指示に従い前記複数の個別プログラム中のどの個別プログラムを実行するかを判断する飛び先判定プログラム、前記個別プログラムに修正の必要が生じた場合にその修正後の修正プログラムが格納された修正プログラム領域、及び前記各個別プログラムに対応する飛び先のアドレスがそれぞれ格納された複数の飛び先リストを有するワンタイムプログラマブルＲＯＭと、
前記メインプログラムを実行するときには、前記飛び先判定プログラムにおいて前記飛び先リストを参照し、前記修正プログラムがない場合には該当する前記個別プログラムを実行し、前記修正プログラムがある場合には該当する前記修正プログラムを実行する中央処理装置と、
を備えたことを特徴とするマイクロコントローラ。
【請求項２】
前記ワンタイムプログラマブルＲＯＭは、ＥＰＲＯＭで構成したことを特徴とする請求項１記載のマイクロコントローラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、本来１回に限りプログラム変更可能なワンタイムプログラマブルＲＯＭ（One Time Programmable Read Only Memory、以下「ＯＴＰＲＯＭ」という。）、例えば、ＥＰＲＯＭ（Erasable Programmable Read Only Memory）が搭載されたＯＴＰマイクロコントローラ（以下「ＯＴＰマイコン」という。）、特にこのＯＴＰマイコンに複数回プログラム変更できる機能を付加したマイクロコントローラ（以下「マイコン」という。）に関するものである。
【０００２】
【従来の技術】
従来、中央処理装置（以下「ＣＰＵ」という。）及び読み出し専用メモリであるＲＯＭ（Read Only Memory）等を内蔵したワンチップマイコンは、そのＲＯＭにプログラムを書き込み、その後はそのプログラムを変更することができないが、半導体の製造段階から例えばガラスマスクを用いて製造できるので、安価に大量生産できる特徴を有していた。これに対し、例えば、アプリケーションプログラム（応用プログラム）の開発者からは、開発終了後のプログラムのバグ（bug ；プログラム中の誤り部分）に対処する機能を要求する声があった。そのバグに対応するためには、ガラスマスクの製造からやり直す必要があり、長期間待たされるばかりでなく、特に少量多品種の製品に対してはコスト的に合わなかったからである。
【０００３】
そこで、ＯＴＰマイコンといって、半導体チップの内部にＥＰＲＯＭを混載するマイコンが１９７０年代に開発された。ＥＰＲＯＭは、紫外線等によって電荷の消去が可能であり、ソース・ドレイン間に負の高電圧を印加し、浮遊ゲート（floating gate ）に電子を蓄積させることにより書き込みが可能な不揮発性メモリである。このＥＰＲＯＭでは、浮遊ゲートに紫外線等による光電効果によって電子を帯電させるため、例えば、紫外線等を透過する石英の窓を有し、これを支持するためにセラミック製のパッケージが必要であり、ＥＰＲＯＭ及びこれを搭載するマイコンは高価にならざるを得なかった。
【０００４】
しかし、ＯＴＰマイコンは、紫外線等による消去はチップの製造段階にとどめ、その後はＥＰＲＯＭへの書き込みだけができるようにしたマイコンであり、原則的に同一領域に対する再書き込みができない構造になっている。このような制限はあるものの、例えば、プラスチックでパッケージでき安価に製造できること、原則１回に限りの書き込みであるがアプリケーションプログラムをマイコンの製造の後において書き込めることから、アプリケーションプログラムの開発者の要望に応える製品であり、現実に自動車の室温コントロール、コンピュータのキーボード制御、モータ制御、モデムの制御等の分野にＯＴＰマイコンは広く普及している。
【０００５】
図２は、従来のＯＴＰマイコンを示す一般的な構成図である。
このＯＴＰマイコンは、通常のマイコンと同様に、半導体チップ１の内部に、プログラム格納用のＥＰＲＯＭ２、ＥＰＲＯＭ書き込み回路３、データ格納用の随時読み書き可能なメモリであるＲＡＭ（Random Access Memory）５、内部バス６、及びマイコン全体をプログラム制御するＣＰＵ７等を有している。ＯＴＰマイコンでは、ＲＯＭではなくＥＰＲＯＭ２にプログラムが格納されている点が通常のマイコンと大きく異なる。ＥＰＲＯＭ２の書き込みには、書き込み回路３の他に、特別の高電圧端子４が設けられている。この高電圧端子４は、通常、電源電圧ＶＤＤ（＝５Ｖ）を印加するが、書き込み時には高電圧ＶＰＰ（＝１２Ｖ程度）を印加してトンネル効果を起こすのに十分な電界を供給する。リセット時に、高電圧端子４を接地電圧ＶＳＳ（＝０Ｖ）にしておくと、ＥＰＲＯＭ２のテストモードに移行するといったＯＴＰマイコンもある。
【０００６】
【発明が解決しようとする課題】
図２のようなＯＴＰマイコンの書き込み制限については、ＥＰＲＯＭ２の同一ゲートへの書き込みが物理的に制限されているということであって、未だ書き込みがされていないゲートへの書き込みができないということではない。そもそも物理的に見てＥＰＲＯＭ２への書き込みとは、制御ゲートに高電圧ＶＰＰを印加し、浮遊ゲートの電荷をトンネル効果を用いて放電させることである。ＥＰＲＯＭ２のゲートは、一旦書き込みによって放電した後は紫外線等による帯電をしない限り再び電荷を蓄積することはなく、逆に一旦紫外線照射等によって帯電すれば、その後書き込みがない限り半永久的に電荷を帯電し続ける。ただ、プログラムのコードはそのアドレスに従って連続的に並び、それに対応するゲート群も一定の領域を占めているから、その領域に新たな書き込みをすれば、一旦書き込まれたゲートは消えずに残り、新たなプログラムのコードに対応しなくなる。このため、全く書き込みのされていない領域への新たな書き込みは問題はないが、重複する書き込みはプログラムを破壊するだけである。さらに、新たな領域にプログラムを追加したとしても、どのように元のプログラムとリンクさせるのか定かではない。このような状況から、ＥＰＲＯＭ２は原則的に再書き込みができないものとされてきた。
【０００７】
しかし、現実のアプリケーションプログラムの開発段階においては、ＥＰＲＯＭ２への再書き込みの要求が少なくない。例えば、アプリケーションプログラムの書き込みを行い、大量に製品を製造し、又は出荷したが、その後テスト又は客先でプログラムのバグが発見されたり、客先の要求に従ってプログラムの一部を改変したい場合である。かかる場合に、新たなプログラムを書き込んだＯＴＰマイコンを製造することはもちろん可能であるが、既に前のプログラムを書き込んでしまった製品は全て無駄になってしまう。この損失は、プログラムの小さなバグが多発した場合には耐え難いものになるだろう。
【０００８】
かかる場合に、マイコンの内部にアプリケーションプログラムを記憶したＲＯＭを有し、かつ、外部に修正プログラムを記憶したＥＰＲＯＭを有するコンピュータシステムで、修正プログラムをＲＡＭに上書きする方法が知られている。例えば、特許第２９９５０３０号公報では、ＣＰＵがＣＰＵ割り込み回路において特定の割り込みアドレスを指定し、プログラムが走行中当該アドレスと一致した場合にはＣＰＵ割り込みを起こし、その割り込みプログラムにおいてＲＡＭに対し修正プログラムの上書きを行う。しかし、この方法では、外部に修正プログラムを置くＥＰＲＯＭを必要とし、何らＯＴＰマイコン固有の特性を利用していないばかりか、ＯＴＰマイコンの利便性や経済性を損なう構成である。
【０００９】
本発明は、前記従来技術が持っていた課題を解決するために、ＥＰＲＯＭではゲートレベルにおいて未だ書き込まれていないゲートに対し書き込みが可能であるという点に着目し、若干の電子回路の追加と新たなプログラムの追加によって、ＯＴＰマイコンに複数回プログラム変更できる機能を付加したマイコンを提供することを目的とする。
【００１５】
【課題を解決するための手段】
前記課題を解決するために、本発明は、マイコンにおいて、個別の機能を実現する複数の個別プログラム、前記個別プログラムを統括するメインプログラム、前記メインプログラムの指示に従い前記複数の個別プログラム中のどの個別プログラムを実行するかを判断する飛び先判定プログラム、前記個別プログラムに修正の必要が生じた場合にその修正後の修正プログラムが格納された修正プログラム領域、及び前記各個別プログラムに対応する飛び先のアドレスがそれぞれ格納された複数の飛び先リストを有するＯＴＰＲＯＭ（例えば、ＥＰＲＯＭ）と、前記メインプログラムを実行するときには、前記飛び先判定プログラムにおいて前記飛び先リストを参照し、前記修正プログラムがない場合には該当する前記個別プログラムを実行し、前記修正プログラムがある場合には該当する前記修正プログラムを実行するＣＰＵとを備えている。
【００１６】
このような構成を採用したことにより、ＣＰＵによるメインプログラムの実行時には、飛び先判定プログラムにおいて飛び先リストが参照され、この飛び先リスト内に修正プログラムがない場合には該当する個別プログラムが実行され、修正プログラムがある場合には該当する修正プログラムが実行される。
【００１７】
【発明の実施の形態】
（実施形態の原理）
図３は、本発明の実施形態を示すＯＴＰマイコンの概略の構成図である。
このＯＴＰマイコンでは、半導体チップ１１内に、ＯＴＰＲＯＭ（例えば、ＥＰＲＯＭ）１２、高電圧端子１４に接続されたＥＰＲＯＭ書き込み回路１３、ＲＡＭ１５、内部バス１６、ＣＰＵ１７、及び検出手段１８等を有している。ＥＰＲＯＭ１２、ＲＡＭ１５、ＣＰＵ１７、及び検出手段１８は、内部バス１６を介して相互に接続されている。
【００１８】
ＥＰＲＯＭ１２は、実行命令コードで構成された実行プログラム（例えば、アプリケーションプログラム）が格納されたプログラム領域と、該プログラム領域中に修正すべき部分があるときにはこの部分の先頭の一部又は全部にプログラム抹消用の指定命令コードが上書きされたプログラム消滅領域と、その修正すべき部分の修正プログラムが格納された修正プログラム領域と、割り込みプログラム等が格納された領域とを有している。高電圧端子１４には、通常、電源電圧ＶＤＤが印加され、書き込み時には高電圧ＶＰＰが印加され、ＥＰＲＯＭ書き込み回路１３に与えられる。ＥＰＲＯＭ書き込み回路１３は、高電圧ＶＰＰを用いてＥＰＲＯＭ１２に対して命令コード等を書き込む回路である。ＣＰＵ１７は、アドレスを選択してＥＰＲＯＭ１２内のプログラムを読み出し、この内容を解読して実行する装置である。検出手段１８は、ＣＰＵ１７によるＥＰＲＯＭ１２内のアプリケーションプログラムの実行時に、該ＥＰＲＯＭ１２内のプログラム消滅領域を検出して割り込み信号Ｓ１８を出力し、ＣＰＵ１７に与えるものである。
【００１９】
図４は、図３中のＣＰＵ１７の概略を示す構成図である。
このＣＰＵ１７は、演算部２１、制御部２２、及びレジスタ部２３等を有し、これらが内部バス１６に接続されている。演算部２１は、算術論理演算ユニット（ＡＬＵ）等を有し、データの演算を行う機能を有している。制御部２２は、マイコン全体を制御するための各種の制御信号を出力するものであり、ＥＰＲＯＭ１２内の命令コードを保持する命令レジスタ２２ａ、該命令レジスタ２２ａから出力された命令コード等を解読する命令デコーダ２２ｂ、及びタイミング／制御信号発生回路２２ｃ等を有している。タイミング／制御信号発生回路２２ｃは、命令デコーダ２２ｂの出力信号、割り込み信号Ｓ１８、及びクロック信号等を入力し、割り込み制御信号等の各種の制御信号を出力する回路である。レジスタ部２３は、ＥＰＲＯＭ１２のメモリアドレスを出力するものであり、データを保持する複数のレジスタからなるレジスタ群２３ａ、スタックポインタ２３ｂ、及びメモリアドレスを出力するプログラムカウンタ２３ｃ等を有している。
【００２０】
図１は、本発明の実施形態の原理を示す概念図である。
ＥＰＲＯＭ１２のアドレス空間３１は、書き込みのされたアプリケーションプログラム領域３２，３４と、書き込みのされていない空白領域３７とに分けることができる。空白領域３７は、修正プログラムを追加する都合上必要な領域である。
【００２１】
例えば、アプリケーションプログラムの開発終了後にプログラムの一部にバグが発見され、これを修正したいと考えたとする。しかし、このままでは空白領域３７に追加のプログラムを書き込んだとしても、元のプログラムとのリンクを取ることはできない。なぜなら、アプリケーションプログラム領域３２，３４は、自ら閉じていて追加の修正プログラム領域３５に制御を渡す手段を有していないからである。ＯＴＰマイコンが原則的に再書き込みができないとされる理由でもある。
【００２２】
そこで、本発明の実施形態では、アプリケーションプログラム領域３２，３４内のバグを解消するために、プログラムの修正すべき部分の先頭の一部又は全部にプログラム抹消用の指定命令コードが上書きされた（例えば、全て書き込み状態のゲートに変えた）プログラム消滅領域３３を作り、このプログラム消滅領域３３を検出するための検出手段１８を追加し、さらに修正プログラム領域３５を作ってこれを実行できるような構成にしている。
【００２３】
即ち、ＣＰＵ１７によるＥＰＲＯＭ１２内のアプリケーションプログラムの実行時には、検出手段１８により、前段のアプリケーションプログラム領域３２の終端でプログラム消滅領域３３における全ビット書き込みの状態を検出し、割り込み信号Ｓ１８を出力してＣＰＵ１７に与える。ＣＰＵ１７は、ＥＰＲＯＭ１２に格納されたＣＰＵ割り込みプログラムに従い、プログラム制御を追加の修正プログラム領域３５へ移す（▲１▼）。ＣＰＵ１７は、ＣＰＵ割り込みプログラムに従い、追加の修正プログラム領域３５内の修正プログラムを実行し、これが終了すると、後段のアプリケーションプログラム領域３４へ復帰し（▲２▼）、このアプリケーションプログラム領域３４内のプログラムを実行する。
よって、本実施形態では、ＯＴＰマイコンという名称に拘わらず、複数回プログラム書き込みを行うことができる効果を有している。
【００２４】
（第１の実施形態）
図１の原理を実現するために、第１の実施形態では、図１及び図３に示す検出手段１８を、例えば、ＲＯＭ割り込み回路で構成している。
ＥＰＲＯＭ１２においては、追加の書き込みにより全てのゲートを書き込み状態にすることができる。そのため、ＥＰＲＯＭ１２に格納された命令コードをこの論理に従い、このバイト値を「００」又は「ｆｆ」にすることができる。通常、ＥＰＲＯＭ１２においては、書き込み状態にしたゲートを論理値「０」に対応させるから、このコードは「００」になるだろう。ところで、多くのマイコンにおいては、コード「００」はＮＯＰ（No Operation）命令に割り当てている。これは、バグを修正するデバッグ（debug ）の段階で誤った命令コードを後にＮＯＰ命令に変更するのに都合がよい。ＮＯＰ命令は、何らＣＰＵ１７の状態を変えないからである。しかし、このようなマイコンにおいて、ＮＯＰを検出する毎に割り込みを生じさせるのは現実的ではない。事実上ＮＯＰ命令が使えなくなるか、あるいはＮＯＰ命令のコードを「００」以外に変更せざるを得ないからである。そこで、本実施形態では、検出手段１８によって命令コード「００」を連続して（又は１つ）検出したときに割り込み信号Ｓ１８を発生させるような汎用性有る構成を採用している。
【００２５】
図５は、本発明の第１の実施形態を示すものであって図３中の検出手段１８の構成図である。
この検出手段１８は、命令レジスタ２２ａに置かれた、又はパイプラインで実行段階にある実行命令コード４１と、予め設定された指定命令コード４２（例えば「００」）とを比較する比較回路４３を有し、この出力端子に信号反転用のインバータ４４が接続されている。また、比較回路４３の出力端子には、カウンタ４５の入力端子ＩＮが接続されると共に、このカウンタ４５のリセット端子Ｒがインバータ４４の出力端子に接続されている。カウンタ４５の出力端子からは割り込み信号Ｓ１８が出力され、この割り込み信号Ｓ１８がＣＰＵ１７内のタイミング／制御信号発生回路２２ｃに与えられると共に、１段又は複数段のアドレスレジスタ４６に与えられるようになっている。アドレスレジスタ４６は、シフトレジスタ等で構成され、プログラム消滅領域３３の先頭アドレスを保持し、割り込み信号Ｓ１８が与えられると、この保持したプログラム消滅領域３３の先頭アドレスを出力して内部バス１６へ送る機能を有している。ここで、比較回路４３、インバータ４４及びカウンタ４５により、比較手段が構成されている。
【００２６】
以下、図５の動作を説明する。
ＣＰＵ１７によって図１のアプリケーションプログラム領域３２のアプリケーションプログラムが実行されると、このアプリケーションプログラムの実行命令コード４１が比較回路４３に入力される。比較回路４３では、入力された実行命令コード４１と、予め設定された指定命令コード４２（例えば「００」）とを比較し、両入力が一致する場合には、一致信号（キャリー）を出力し、カウンタ４５のカウント値を増加させる。比較回路４３の比較結果が不一致の場合には、この不一致の信号がインバータ４４で反転されてカウンタ４５のリセット端子Ｒに入力され、該カウンタ４５がリセットされる。
【００２７】
カウンタ４５が例えば３ビット構成の場合、指定命令コード４２（例えば「００」）が８回連続したとき、このカウンタ４５の出力端子ＯＵＴからキャリーが出力され、これが割り込み信号Ｓ１８としてＣＰＵ１７内のタイミング／制御信号発生回路２２ｃに与えられると共に、アドレスレジスタ４６に与えられる。割り込み信号Ｓ１８がアドレスレジスタ４６に与えられると、このアドレスレジスタ４６からプログラム消滅領域３３の先頭アドレスが出力され、内部バス１６へ送られる。
【００２８】
割り込み信号Ｓ１８が与えられたＣＰＵ１７は、ＥＰＲＯＭ１２内のＣＰＵ割り込みプログラムに従い、アプリケーションプログラムの設計段階から予め定めていた修正プログラム領域３５の先頭アドレスへジャンプし（図１の▲１▼）、この修正プログラムを実行する。プログラム消滅領域３３の最終アドレス（即ち、後段のアプリケーションプログラム領域３４の先頭アドレス）は、該プログラム消滅領域３３を作った段階で予め分かっている。ＣＰＵ１７は、修正プログラム領域３５の修正プログラムを実行した後、後段のアプリケーションプログラム領域３４の先頭アドレスに復帰し（図１の▲２▼）、このアプリケーションプログラムを連続して実行する。
【００２９】
次に、この第１の実施形態が、複数回の修正に耐え得る柔軟性を有することについて説明する。
図５の検出手段１８では、ＣＰＵ１７による後段のアプリケーションプログラム領域３４のアプリケーションプログラムを実行しているときに、次のプログラム消滅領域を検出した場合には、ＣＰＵ割り込みプログラムにおいてその検出したアドレスを比較することにより、次の第２の修正プログラム領域にジャンプすることができる。アドレスレジスタ４６は、複数のプログラム消滅領域のアドレスを保持する機能を果たし、カウンタ４５から出力される割り込み信号Ｓ１８によってそのときのアドレスを内部バス１６からＣＰＵ１７に取り込むことにより、上記目的（複数回の修正）を達成できる。この目的に合うように、アドレスレジスタ４６は、シフトレジスタ等の構成を持つことが望ましい。割り込みプログラムに従ってＣＰＵ１７は、アドレスレジスタ４６に置かれたアドレス情報をチェックしに行くことになる。この際、アドレスの番地の大きさの順番を指標にして何番目の修正プログラムを実行すべきか判断できる。
【００３０】
以上のように、この第１の実施形態では、次の（ａ）、（ｂ）のような効果がある。
（ａ）  本実施形態では、ＥＰＲＯＭ１２に重ね書きができる点に着目し、指定命令コード４２（例えば「００」）を作りだし、かつ、これを検出手段１８で検出することでＣＰＵ１７に対して割り込みを生じさせ、修正プログラムの実行を可能にしている。従来、外付けのＥＰＲＯＭを用いてＲＡＭ１５にプログラムを重ね書きする技術は存在したが、本実施形態のように予め修正を想定してその検出手段１８を設け、何ら外付けの修正手段を使わずに、かつ、ＯＴＰマイコンの利便性を損なうことなくアプリケーションプログラムの修正を実現することができる。
【００３１】
（ｂ）  命令コード「００」がＮＯＰ命令に対応することが多いことに鑑み、カウンタ４５を用い、命令コード「００」を連続して検出した場合にのみＣＰＵ１７に対して割り込みを生じさせる汎用性有る構成を採用している。この結果、ＯＴＰマイコンという名称に拘わらず、複数回のプログラム修正を可能にしたのであり、それに要するコストも若干の回路付加で済ませることができる。
【００３２】
この第１の実施形態では、次の（ｉ）〜(iii）のような変形例が考えられる。
（ｉ）  命令コード「００」が特定の命令に割り当てられていないようなマイコンにおいては、図５のカウンタ４５は不用となり、比較回路４３の一致出力がそのまま割り込み信号Ｓ１８として出力される構成を取ることもできる。
【００３３】
（ii）  指定命令コード４２は理論上「００」に限られない。例えば、通常の命令は最上位ビットを１にし、指定命令コード４２は最上位ビットを０にすることによって、理論上区別することができ、かつ、ＥＰＲＯＭ１２の重ね書きも可能である。ただ、このような方式は命令コードの数を減少させるので、ＯＴＰマイコンの用途等に応じて適宜適用すべきである。
【００３４】
(iii）  修正すべき回数が１回で十分な場合には、アドレスレジスタ４６は必ずしも必要ではない。アドレスレジスタ４６を設けない場合は、ＣＰＵ割り込みプログラムは、予め固定された修正プログラム領域３５に制御を移すことになる。
【００３５】
（第２の実施形態）
図６は、本発明の第２の実施形態を示すものであって図３中の検出手段１８の他の構成図である。
この検出手段１８では、図５の構成と異なり、ＣＰＵ１７の実行段階にある命令コードのＥＰＲＯＭ１２上のアドレス４７と、ＥＰＲＯＭ１２上の特定アドレス４８とを、比較手段（例えば、比較回路）４３で比較し、それらのアドレス４７と４８が一致する場合に該比較回路４３から割り込み信号Ｓ１８を出力し、ＣＰＵ１７に割り込みを生じさせるようになっている。特定アドレス４８は、アドレスレジスタ４９に保持されている。
【００３６】
図７は、本発明の第２の実施形態を示すＥＰＲＯＭ１２のアドレス空間の図である。
このＥＰＲＯＭ１２のアドレス空間３１は、図１と同様に、アプリケーションプログラム領域３２，３４、プログラム消滅領域３３、及び追加の修正プログラム領域３５の他に、固定アドレス格納領域５１を有している。固定アドレス格納領域５１は、プログラム消滅領域３３のアドレスを格納する領域であり、ＣＰＵ１７によってデータ格納領域として参照される。ＣＰＵ１７が、アプリケーションプログラム領域３２のアプリケーションプログラムを実行する前に、まず、アプリケーションプログラムの初期化を行い、この初期化の際に、固定アドレス格納領域５１に格納されたプログラム消滅領域３３のアドレスを、アドレスレジスタ４９に格納した後、アプリケーションプログラムを実行するようになっている。
【００３７】
即ち、ＥＰＲＯＭ１２の特定アドレス４８は、プログラム消滅領域３３を定めたものであり、この消滅領域３３を定める際にそのアドレスが決定されるのであるから、予め定めることはできず、追加の修正プログラム領域３５を作る際にＥＰＲＯＭ１２へ追加の書き込みを行うべきものである。本実施形態では、ＥＰＲＯＭ１２のアドレス空間３１において、新たに固定アドレス格納領域５１を設け、特定アドレス４８を格納する領域として使用する。なお、この固定アドレス格納領域５１は、ＣＰＵ１７によってあくまでデータ格納領域として参照されるだけであるから、そのデータの参照及び格納において、比較回路４３から出力される割り込み信号Ｓ１８によってＣＰＵ割り込みが生じることはない。
【００３８】
次に、図６及び図７の動作を説明する。
ＣＰＵ１７がＥＰＲＯＭ１２内のアプリケーションプログラムを実行する前に、このアプリケーションプログラムの初期化を行い、固定アドレス格納領域５１に格納されたプログラム消滅領域３３のアドレスがアドレスレジスタ４９に格納される。ＣＰＵ１７がアプリケーションプログラム領域３２のアプリケーションプログラムを実行すると、この実行命令コードのアドレス４７と、アドレスレジスタ４９に格納されたプログラム消滅領域３３のアドレス（即ち、ＥＰＲＯＭ１２の特定アドレス４８）とが、比較回路４３で比較され、それらのアドレス４７と４８が一致するときには該比較回路４３から割り込み信号Ｓ１８が出力され、ＣＰＵ１７へ与えられる。ＣＰＵ１７は、割り込み信号Ｓ１８が与えられると、ＥＰＲＯＭ１２内の割り込みプログラムに従い、前段のアプリケーションプログラム領域３２から追加の修正プログラム領域３５へ移り、この修正プログラム領域３５の修正プログラムを実行する。修正プログラムの実行後、ＣＰＵ１７は割り込みプログラムに従い、後段のアプリケーションプログラム領域３４へ復帰し、このアプリケーションプログラムを実行する。
【００３９】
ここで、本実施形態のように固定アドレス格納領域５１を設けるのではなく、レイアウト上直接、特定アドレス値の出力をＥＰＲＯＭ１２から引き出し、かつ比較回路４３への入力にできないかを考えてみると、これは現在のチップ上のＥＰＲＯＭ１２のレイアウト構成からして難しいと言わざるを得ない。チップ上に別個にＥＰＲＯＭを設ける手段も考えられるが、チップ面積の増加や端子数の増加等といったＯＴＰマイコンの利点を失わせることになるだろう。
【００４０】
このような問題を解決するため、本実施形態では、アドレスレジスタ４９を設け、アプリケーションプログラムの初期化の段階において、このアドレスレジスタ４９に、固定アドレス格納領域５１に格納したプログラム消滅領域３３のアドレス（即ち、特定アドレス４８）を移し、比較回路４３への入力としている。特定アドレス４８が何ら書き込みのない最終番地（例えば、２ＫバイトのＥＰＲＯＭ１２なら「０ｘ７ｆｆ」）なら修正プログラム領域３５はなかったことになるから、比較回路４３を常に割り込み禁止となるように構成できるし、その特定アドレス４８が最終番地以外なら追加の修正プログラム領域３５があったと判断できるだろう。
【００４１】
本実施形態では、複数回のプログラム修正を以下のようにして達成することができる。
前回の追加の修正プログラム領域３５のアドレスを修正する場合には、そのアドレスに重ね書きしてアドレスの値を０（例えば、２ＫバイトのＥＰＲＯＭ１２なら「０ｘ０００」）にしておき、新たに次の番地に追加の修正プログラム領域のアドレスを書き込んでおく。アプリケーションプログラムの初期化の段階において、その初期化プログラムは、固定アドレスが０の場合にはそのアドレスを無視し、次のアドレスを検査しに行き、固定アドレスが最終アドレス又は値が０でない場合にのみそれを修正プログラム領域のアドレスとして、アドレスレジスタ４９に格納する。要はアプリケーションプログラムの初期化の段階において、予めプログラム修正を前提とした初期化プログラムを作っておけば、複数回のプログラム修正を容易に実現できる。
【００４２】
アプリケーションプログラムの修正箇所が複数になった場合には、この数に応じてアドレスレジスタ４９を複数段にすると共に、その数に応じて比較回路４３の回路数を設ければよい。このように回路量が増えるが、修正箇所が複数でも対応可能である。
このように、この第２の実施形態では、次の（ａ）、（ｂ）のような効果がある。
【００４３】
（ａ）  本実施形態では、ＥＰＲＯＭ１２の特定アドレス４８を検出する手段を付加している。即ち、予め定められた固定アドレス格納領域５１にその検出すべき特定アドレス４８を書き込むことで、修正プログラムの存在を検知し、かつ、ＣＰＵ１７に対し割り込みを生じさせる比較回路４３を設けている。この結果、アプリケーションプログラムの初期化段階で、プログラムの修正を前提とした初期化を行っておけば、その後は複数回の修正プログラムの追加に対応することができる。この場合には、ＮＯＰ命令との衝突も起こらないので、第１の実施形態よりもプログラム作成段階での自由度は高い。ただ、本実施形態では、複数箇所のプログラム修正の場合に、修正に要する回路量が比例して増大する欠点がある。この点についてだけ着目すれば、第１の実施形態のアドレスレジスタ４６を使う方が経済的である。この場合は、単にアドレスレジスタ４６の段数を増やすだけで済むからである。
【００４４】
（ｂ）  従来、ＣＰＵが直接割り込みアドレスを指定し、このアドレスに至ると割り込みが生じるという装置があった。しかし、本実施形態では、固定アドレス格納領域５１を持ち、これにプログラム消滅領域３３のアドレスを重ね書きするのであるから、前記従来技術と異なる新しい技術であり、従来技術にはない上述したような効果がある。
【００４５】
（第３の実施形態）
図８は、本発明の第３の実施形態を示すものであって図３中の検出手段１８の他の構成図である。
この検出手段１８では、図５中のインバータ４４、カウンタ４５及びアドレスレジスタ４６が省略され、実行命令コード４１と指定命令コード４２（例えば「００」）とを比較してこれらが一致する場合に割り込み信号Ｓ１８を出力する比較手段（例えば、比較回路）４３のみを有している。
【００４６】
図９は、本発明の第３の実施形態を示すＥＰＲＯＭ１２のアドレス空間の図である。
このＥＰＲＯＭ１２のアドレス空間３１には、アプリケーションプログラム領域３２，３４、プログラム消滅領域３３、及び追加の修正プログラム領域３５の他に、飛び先判定プログラム６１と、追加の修正プログラム領域３５のアドレスが格納された固定アドレス格納領域６２とを有している。また、このＥＰＲＯＭ１２には、ＣＰＵ割り込みプログラム（図中省略）も格納されている。
【００４７】
次に、図８及び図９の動作を説明する。
図３のＣＰＵ１７がＥＰＲＯＭ１２内のアプリケーションプログラム領域３２のアプリケーションプログラムを実行すると、このアプリケーションプログラムの実行命令コード４１と、予め設定された指定命令コード４２（例えば「００」）とが、比較回路４３により比較され、両者が一致する場合には割り込み信号Ｓ１８が出力され、ＣＰＵ１７に与えられる。これにより、ＣＰＵ１７により実行される割り込みプログラムは、プログラム消滅領域３３の存在を検知できる。本実施形態では、プログラム消滅領域３３及び追加の修正プログラム領域３５の確定につき、割り込みプログラムではなく、専ら飛び先判定プログラム６１に依存していることを特徴とする。
【００４８】
即ち、ＣＰＵ１７が、前段のアプリケーションプログラム領域３２のアプリケーションプログラムを実行中に、比較回路４３がプログラム消滅領域３３を検出すると、割り込み信号Ｓ１８によってＣＰＵ１７が、割り込みプログラムに従い飛び先判定プログラム６１に制御を移す（▲３▼）。飛び先判定プログラム６１は、固定アドレス格納領域６２を参照して（▲４▼）、追加の修正プログラム領域３５の位置を判定し、制御を該追加の修正プログラム領域３５の修正プログラムに移す（▲５▼）。これにより、新たな修正プログラムの実行が確保されたことになる。さらに、修正プログラム領域３５の修正プログラムは、この実行の最終段階で、元のアプリケーションプログラムに復帰すべく後段のアプリケーションプログラム領域３４へ制御を移し（▲６▼）、アプリケーションプログラムを実行する。これにより、追加の修正プログラムの実行が確保されたことになる。
【００４９】
このような修正プログラムの実行確保の方法は、修正プログラムに制限を生ずることに注意する必要がある。つまり、修正プログラム領域３５の修正プログラムは、メインプログラム（アプリケーションプログラム領域３２，３４のアプリケーションプログラム）とは独立したものでなければならず、例えば、メインプログラム上にあるＪＵＭＰ命令等で当該修正領域にリンクする場合には特別の考慮が必要になる。これは追加の修正プログラムは、それがＥＰＲＯＭ１２に置かれるという制限下で、あくまでプログラム消滅領域３３以外のメインプログラムを変更できないという前提に立っているからである。仮にメインプログラムから当該修正プログラム領域３５にジャンプする命令が複数あったとするとどうなるかを考えてみれば明らかである。そこではジャンプ先のプログラムは消滅している。何れのＪＵＭＰ命令の場合も修正領域が検出され、割り込みプログラムに制御が移って、その結果修正プログラムが実行されるが、そこでは何れのＪＵＭＰ命令からリンクされたかの判断ができないだろう。この困難のために当該修正プログラム領域３５が必要以上に大きくなる可能性がある。
【００５０】
この第３の実施形態では、次のような効果がある。
本実施形態では、ＥＰＲＯＭ１２のアドレス空間３１において、独立した飛び先判定プログラム６１と固定アドレス格納領域６２とを有し、アプリケーションプログラム作成上の複雑さは増加するが、図５のアドレスレジスタ４６あるいは図６のアドレスレジスタ４９を別個に設ける必要がないので、第１及び第２の実施形態に比べて構成を簡易にできる。
【００５１】
（第４の実施形態）
図１０（Ａ）、（Ｂ）は本発明の第４の実施形態を示すアプリケーションプログラムのプログラム構造図であり、同図（Ａ）はアプリケーションプログラムのアドレス空間を示す図、同図（Ｂ）は同図（Ａ）中の飛び先リストの例を示す図である。
【００５２】
本実施形態のＯＴＰマイコンでは、図１及び図３の検出手段１８を設けずに、ＥＰＲＯＭ１２に格納されるアプリケーションプログラムによって複数回のプログラム修正を可能にしている。
図１０（Ａ）に示すように、ＥＰＲＯＭ１２に格納されるアプリケーションプログラムのアドレス空間には、メインプログラム７１、飛び先判定プログラム７２、飛び先リスト（Ｌ１，…，Ｌｎ）７３、個別プログラム（Ｋ１，…，Ｋｎ）７４、及び修正プログラム領域（Ｓ１，…，Ｓｍ）７５が設けられている。メインプログラム７１は、個別の機能を実現する個別プログラム（Ｋ１，…，Ｋｎ）７４を統括する役割を持つ。個別プログラム（Ｋ１，…，Ｋｎ）７４は、ｎ個（Ｋ１，…，Ｋｎ）のプログラムの集まりであり、各プログラムは例えば通信プログラム、表示プログラム、関数計算プログラム等、個別の機能を実現している。
【００５３】
メインプログラム７１の内部又はこれとは別個に、飛び先判定プログラム７２が設けられ、これはメインプログラム７１の指示に従ってどの個別プログラム（Ｋ１，…，Ｋｎ）７４を実行するかを判断するプログラムである。この判断には、飛び先リスト（Ｌ１，…，Ｌｎ）７３が用いられる。飛び先リスト（Ｌ１，…，Ｌｎ）７３は、各個別プログラム（Ｋ１，…，Ｋｎ）７４に対応してｎ個（Ｌ１，…，Ｌｎ）ある。修正プログラム領域（Ｓ１，…，Ｓｍ）７５は、個別プログラム（Ｋ１，…，Ｋｎ）７４に修正の必要が生じた場合にこの修正後のプログラムを格納する領域であり、ここではｍ個（Ｓ１，…，Ｓｍ）の修正プログラム領域７５が設けられている。
【００５４】
飛び先リスト（Ｌ１，…，Ｌｎ）７３は、図９の修正プログラム領域３５のアドレスを格納する固定アドレス格納領域６２に対応している。図７の固定アドレス格納領域５１は、プログラム消滅領域３３のアドレスを格納する領域であり、本実施形態の飛び先リスト（Ｌ１，…，Ｌｎ）７３と使用目的が異なっている。以下、図１０（Ｂ）の飛び先リストの例を参照しつつ、どのようにして複数回のプログラム修正を実現するかを説明する。
【００５５】
図３のＣＰＵ１７が実行するメインプログラム７１において、個別の機能（例えば、文字表示）を実現したいと考えたとき、メインプログラム７１はその機能を実現する個別プログラム（例えば、Ｋｉ，１≦ｉ≦ｎ）に制御を渡すべく、飛び先判定プログラム７２を該パラメータｉ（１≦ｉ≦ｎ）と共に呼び出す。すると、飛び先判定プログラム７２は、そのパラメータｉに従い、飛び先リストＬｉを参照しに行き、この飛び先リストＬｉに従って飛び先を判定する。この飛び先は、何ら修正がない場合には個別プログラムＫｉになるし、修正プログラムの場合には修正プログラム領域（Ｓ１，…，Ｓｍ）７５の１つ（例えば、Ｓｊ，１≦ｊ≦ｍ）になる。
【００５６】
図１０（Ｂ）の飛び先リスト７３において、飛び先リストＬ１を参照した場合が何ら修正がない場合に当たる。ちなみに飛び先リストＬ１では、２ＫバイトのＥＰＲＯＭ１２の最終アドレス「０ｘ７ｆｆ」を前提として、リストの最初に飛び先（Ａ１）があり、これは個別プログラム（Ｋ１）の先頭アドレスに一致することになる。最初に存在する飛び先（Ａ１）は、これがアドレス「０ｘ０００」でないことから、修正プログラムはないと判断される。修正プログラムがある場合には、ＥＰＲＯＭ１２が重ね書きできるという本発明の原理に従い、この飛び先は「０ｘ０００」に書き換えられているはずである。ここでは、飛び先判定プログラム７２は飛び先リスト７３の中で、最初に「０ｘ０００」でない飛び先をその真の飛び先と判断する。即ち、本実施形態では、飛び先リスト７３を重ね書きすることで修正プログラムの存在を明らかにし、この修正プログラムに制御を移すことでアプリケーションプログラムの修正を実現している。図１０（Ｂ）の飛び先リスト７３においては、飛び先は３個提示できるから、修正は各個別プログラム７４につき２回までできることになる。
【００５７】
次に、図１０（Ｂ）の飛び先リストＬ２を見てみる。個別プログラムＫ２の場合、その飛び先は飛び先リストＬ２で判断され、この第１のアドレスは「０ｘ０００」であり、この第２のアドレスは（Ａ２）であり、この第３のアドレスは「０ｘ７ｆｆ」である。第１のアドレスが「０ｘ０００」であることは、既に重ね書きされて他の修正プログラムが存在することを意味する。その第２のアドレスが（Ａ２）であり、これが「０ｘ０００」でないことは、これが個別プログラムＫ２の修正プログラムの飛び先であることを意味している。第３のアドレス「０ｘ７ｆｆ」の意味するところは、これらのビットにおける浮遊ゲートが紫外線照射等で帯電した後１度も書き込みされていないことである。これは次の修正プログラムのためのアドレスであり、いわば予備アドレスである。最後に飛び先リストＬｎを見てみる。第１と第２のアドレスは「０ｘ０００」であり、第３のアドレスは（Ａｎ）であるから、既に２度の修正をして個別プログラムＫｎの修正プログラムはアドレス（Ａｎ）に存在することになる。
【００５８】
この第４の実施形態では、次のような効果がある。
本実施形態では、アプリケーションプログラムの構造が予めかなり制限されたものである。つまり、メインプログラム７１の他に、飛び先判定プログラム７２、構造化された飛び先リスト（Ｌ１，…，Ｌｎ）７３、及び機能化された個別プログラム（Ｋ１，…，Ｋｎ）７４を有し、さらにこの他にＥＰＲＯＭ１２のアドレス空間内に修正プログラム領域（Ｓ１，…，Ｓｍ）７５を持つ余裕がなければならない。しかし、本実施形態では、図１及び図３の検出手段１８を必要とせず、専らアプリケーションプログラムの構造によってプログラムの修正を可能とするものであって、何ら付加すべき電子回路のハードウェアを必要としない点で優れている。
【００５９】
なお、本発明は上記実施形態に限定されず、例えば、図３のＯＴＰマイコンを他の構成に変更したり、ＥＰＲＯＭ１２を他のＯＴＰＲＯＭで構成したり、あるいはＥＰＲＯＭ１２に格納されるプログラムを図示以外の構成に変更する等、種々の変形が可能である。
【００６３】
【発明の効果】
以上詳細に説明したように、本発明によれば、ＯＴＰＲＯＭが搭載されたマイコンにおいて、ＣＰＵがメインプログラムを実行するときには、飛び先判定プログラムに応じて飛び先リストを参照し、修正プログラムがない場合には該当する個別プログラムを実行し、修正プログラムがある場合には該当する修正プログラムを実行するようにしたので、何ら電子回路等のハードウェアを付加することなく、専らＯＴＰＲＯＭに格納されるプログラムの構造によってこのプログラムの複数回の修正が可能になる。
ＯＴＰＲＯＭを例えばＥＰＲＯＭで構成した場合、このＥＰＲＯＭの重ね書きができる点に着目して簡単かつ的確に複数回のプログラムの修正が可能になる。
【図面の簡単な説明】
【図１】本発明の実施形態の原理を示す概念図である。
【図２】従来のＯＴＰマイコンを示す一般的な構成図である。
【図３】本発明の実施形態を示すＯＴＰマイコンの概略の構成図である。
【図４】図３中のＣＰＵの概略を示す構成図である。
【図５】図３中の検出手段を示す構成図である。
【図６】本発明の第２の実施形態を示す検出手段の他の構成図である。
【図７】本発明の第２の実施形態を示すＥＰＲＯＭのアドレス空間の図である。
【図８】本発明の第３の実施形態を示す検出手段の他の構成図である。
【図９】本発明の第３の実施形態を示すＥＰＲＯＭのアドレス空間の図である。
【図１０】本発明の第４の実施形態を示すアプリケーションプログラムのプログラム構造図である。
【符号の説明】
１２    ＥＰＲＯＭ
１３    ＥＰＲＯＭ書き込み回路
１４    高電圧端子
１５    ＲＡＭ
１７    ＣＰＵ
１８    検出手段
３１    ＥＰＲＯＭのアドレス空間
３２，３４    アプリケーションプログラム領域
３３    プログラム消滅領域
３５    追加の修正プログラム領域
４３    比較回路
４５    カウンタ
４６，４９    アドレスレジスタ
５１，６２    固定アドレス格納領域
６１    飛び先判定プログラム
７１    メインプログラム
７２    飛び先判定プログラム
７３    飛び先リスト
７４    個別プログラム
７５    修正プログラム領域
【図１】
0003795744.tif 000002
【図２】
0003795744.tif 000003
【図３】
0003795744.tif 000004
【図４】
0003795744.tif 000005
【図５】
0003795744.tif 000006
【図６】
0003795744.tif 000007
【図７】
0003795744.tif 000008
【図８】
0003795744.tif 000009
【図９】
0003795744.tif 000010
【図１０】
0003795744.tif 000011