(57)【特許請求の範囲】
【請求項１】
読み出し専用メモリ（ＲＯＭ）とランダムアクセスメモリ（ＲＡＭ）と演算及び制御を行う中央演算装置（ＣＰＵ）を同一チップ内に集積したマイクロコンピュータで、前記ＲＯＭに格納された命令に修正箇所が生じた場合に、その修正箇所から前記ＲＡＭ内に格納された修正プログラムに実行を分岐させるマイクロコンピュータのプログラム変更装置であって、
修正プログラムが前記ＲＡＭ内に格納され、その開始アドレスを同ＲＡＭ内の予め定められた所定のアドレスに格納し、
前記ＲＯＭの所望の修正箇所のアドレスを格納する為の修正アドレス記憶手段と、
命令をフェッチする為の前記ＲＯＭへの読み出しアドレスと、前記修正アドレス記憶手段に格納されたアドレスとを比較し、一致した場合に一致信号を出力する比較回路とを具備し、
ＣＰＵの命令解読器は、前記比較回路が一致信号を出力した事を検知する手段を備え、一致信号を検知すると前記命令解読器はマイクロ命令の実行により前記ＲＡＭの所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させる事を特徴とするマイクロコンピュータのプログラム変更装置。
【請求項２】
修正アドレス記憶手段と命令のフェッチアドレスが一致すると、前記ＲＯＭから読み出された命令コードと前記比較回路の一致信号を同時にＣＰＵへ入力し、ＣＰＵは前記命令コードと一致信号を同命令コードの解読タイミングまで保持する手段を具備し、同命令コードの解読時にＣＰＵの命令解読器は入力された一致信号により同命令コードが修正すべき命令コードである事を検知する手段を備える事を特徴とする請求項１に記載のマイクロコンピュータのプログラム変更装置。
【請求項３】
修正アドレス記憶手段と比較回路を複数組備えることを特徴とする請求項１または請求項２に記載のマイクロコンピュータのプログラム変更装置。
【請求項４】
読み出し専用メモリ（ＲＯＭ）とランダムアクセスメモリ（ＲＡＭ）と演算及び制御を行う中央演算装置（ＣＰＵ）を同一チップ内に集積したマイクロコンピュータで、
前記ＲＯＭに格納された命令に修正箇所が生じた場合に、その修正箇所から前記ＲＡＭ内に格納された修正プログラムに実行を分岐させるマイクロコンピュータのプログラム変更装置であって、
修正プログラムが前記ＲＡＭ内に格納され、その開始アドレスを同ＲＡＭ内の予め定められた所定のアドレスに格納し、
前記ＲＯＭの所望の修正箇所のアドレスを格納する為の修正アドレス記憶手段と、命令のフェッチアドレスと、前記修正アドレス記憶手段に格納されたアドレスとを比較し、一致した場合に一致信号を出力する比較回路とを最大で２ｎ−１組備え（ｎは自然数）、
前記最大で２ｎ−１本の一致出力から、どの比較回路が一致したかを示すｎ本の一致デコード信号を生成するデコード回路を具備し、前記一致デコード信号の状態の内、一組の特定の状態（全ての信号が０又は１）を全ての比較回路が不一致の状態とし、
前記一致デコード信号を命令コードと同時にＣＰＵへ入力し、ＣＰＵは前記命令コードと一致デコード信号を同命令コードの解読タイミングまで保持する手段を備え、
同命令コードの解読時にＣＰＵの命令解読器は入力された一致信号により同命令コードが修正すべき命令コードである事を検知する手段と、前記一致デコード信号から修正プログラムの開始アドレスが格納された前記ＲＡＭ内の所定のアドレスを生成する手段を備え、
修正が必要である事を検知すると、前記命令解読器はマイクロ命令の実行により前記アドレス生成手段により生成された前記ＲＡＭの所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させる事を特徴とするマイクロコンピュータのプログラム変更装置。
【請求項５】
請求項４に記載の命令コードと一致デコード信号を同命令コードの解読タイミングまで保持する手段として、
ＣＰＵは解読する命令コードを格納する為の命令レジスタと少なくとも１段以上のプリフェッチされた命令コードを格納する命令キューを備え、一致デコード信号は命令コードと同じ段数の一時記憶手段上を、命令コードと同期して転送させる事を特徴とするマイクロコンピュータのプログラム変更装置。
【請求項６】
請求項４に記載の修正すべき命令コードであることを検知する手段として一致デコード信号を命令コードと同時に命令解読器に入力し、
命令解読器では修正すべき命令コードであることを示す一致デコード信号が入力されると命令コードとは無関係に前記ＲＡＭの所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させるマイクロ命令を実行させる事を特徴とするマイクロコンピュータのプログラム変更装置。
【請求項７】
ＣＰＵの命令解読器に少なくとも命令レジスタの出力とマイクロアドレスポインタの出力を入力するマイクロコンピュータであって、前述請求項４に記載の修正すべき命令コードであることを検知する手段として、命令コードを命令レジスタに格納する時に修正すべき命令コードである事を示す一致デコード信号が入力されていると命令レジスタとマイクロアドレスポインタに特定の値を設定し、命令解読器では前記特定の値をデコードすると、前記ＲＡＭの所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させるマイクロ命令を実行させる事を特徴とするマイクロコンピュータのプログラム変更装置。
【請求項８】
請求項４に記載の修正プログラムの開始アドレスが格納された前記ＲＡＭ内の所定のアドレスを生成する手段として、ＣＰＵに入力された一致デコード信号を、ＲＡＭアドレスの特定のｎビットに出力する事を特徴とするマイクロコンピュータのプログラム変更装置。
【請求項９】
命令オペレーションコードとそれに続くオペランドから構成される命令コードの語調が一度にフェッチするデータのビット幅のｎ分の１（ｎ＝２又は４）の整数倍で、連続する命令コードの境界が同時にフェッチするデータの中間位置に存在する場合があるマイクロコンピュータであって、
修正アドレス記憶手段には修正が必要な命令の命令オペレーションコードの先頭が存在するＲＯＭのアドレスを格納し、
修正アドレス記憶手段と命令フェッチアドレスが一致したことを示す一致デコード信号を前記命令オペレーションコードの先頭が存在するフェッチデータと同時にＣＰＵへ入力し、
ＣＰＵは修正が必要な命令コードの解読タイミングまで一致デコード信号を保持する手段を備え、
修正が必要な命令コードの先頭が含まれるフェッチデータから抽出した命令オペレーションコードの解読時にＣＰＵの命令解読器は入力された一致信号により同命令コードが修正すべき命令コードである事を検知する手段を備え、
修正が必要である事を検知すると、前記命令解読器はマイクロ命令の実行により前述ＲＡＭの所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させる事を特徴とするマイクロコンピュータのプログラム変更装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロコンピュータに内蔵されたＲＯＭに固定記憶されたプログラムを半導体集積回路の製造後に修正し、正常に動作させる事ができるマイクロコンピュータのプログラム変更装置に関するものである。
【０００２】
【従来の技術】
近年の電子機器にはその高機能化、高性能化に対応する為にマイクロコンピュータが多く利用されている。一般的にこれらのマイクロコンピュータの動作を決めるプログラムは読み出し専用メモリ（以下ＲＯＭと略す）に格納される。特に民生機器等の大量生産されるような機器に使用される場合は、その単価が安い等の理由から半導体集積回路の製造工程時にプログラムを固定設置するマスクＲＯＭが用いられる場合が多い。しかしながら前記マスクＲＯＭは製造工程時にプログラムを固定設置する為、製造後に仕様変更の発生やプログラムミスの発覚等の理由によりプログラムに修正を加えたくても不可能であり、最悪の場合は完成品を廃棄せざるをえなかった。また、プログラムに修正を加えるためには再度マイクロコンピュータを製造するしか方法が無く費用と時間を浪費すると言う問題があった。
【０００３】
これらの問題を解決するために従来よりいくつかのプログラム変更装置が考案され、この装置をマイクロコンピュータに内蔵することで製造後のマイクロコンピュータに対してプログラムの修正を可能ならしめている。
【０００４】
図８は従来のプログラム変更装置の第１の実施例である。
図において１はプログラムカウンタ、２はプログラムが格納されるＲＯＭ、３１は修正アドレスレジスタ、３２は比較回路、３３は修正命令レジスタ、４は選択回路、５は命令解読器である。
【０００５】
通常マイクロコンピュータはプログラムカウンタ１により指し示されたＲＯＭ２上の命令を順次読み出し、命令解読器５で解読後、マイクロ命令等の実行により基本動作を行う。
【０００６】
本従来例のプログラム変更装置では、修正が必要な命令が格納されるアドレスを修正アドレスレジスタ３１に、修正後の命令を修正命令レジスタに格納する。修正アドレスレジスタ３１とプログラムカウンタ１の値は常に比較回路３２により比較され、一致を検出すると選択回路４を修正命令レジスタ側に切り替え、ＲＯＭからではなく、修正命令レジスタに格納される命令コードを命令解読器へ供給する事で命令の修正を行っている。修正アドレスレジスタ３１と比較回路３２及び修正命令レジスタ３３で構成されるプログラム変更装置３ａは、一つのアドレスに格納される命令を修正する為に一組必要であり、通常は複数のアドレスの命令を修正する為に複数組のプログラム変更装置３ａ〜３ｎが実装される。
【０００７】
図９は従来のプログラム変更装置の第２の実施例である。
図において１はプログラムカウンタ、２はプログラムが格納されるＲＯＭ、３１は修正アドレスレジスタ、３２は比較回路、３４は割込ベクタレジスタ、５は命令解読器、６はＲＡＭである。
【０００８】
本従来例のプログラム変更装置では、修正が必要な命令が格納されるアドレスを修正アドレスレジスタ３１に、一連の修正プログラムをＲＡＭ６に、修正プログラムの開始アドレスを割込ベクタレジスタ３４に格納する。修正アドレスレジスタ３１とプログラムカウンタ１の値は常に比較回路３２により比較され、一致を検出すると割込要求信号を発生する。ＣＰＵが割込要求信号を受理すると、現在のプログラムカウンタ値等をスタックに退避し、割込ベクタレジスタ３４から割込分岐先のアドレスを読み出し、プログラムカウンタ１に設定する。この場合割込ベクタレジスタにはＲＡＭ上に格納した修正プログラムの開始番地が格納されており、割込処理プログラムとして、修正プログラムを実行することになる。
【０００９】
図１０は従来のプログラム変更装置の第３の実施例である。
図において１はプログラムカウンタ、２はプログラムが格納されるＲＯＭ、３１は修正アドレスレジスタ、３２は比較回路、３５は分岐アドレスレジスタ、４は選択回路、５は命令解読器、３６は分岐命令発生回路である。
【００１０】
本従来例のプログラム変更装置では、修正が必要な命令が格納されるアドレスを修正アドレスレジスタ３１に、一連の修正プログラムをＲＡＭ６に、修正プログラムの開始アドレスを分岐アドレスレジスタ３５に格納する。修正アドレスレジスタ３１とプログラムカウンタ１の値は常に比較回路３２により比較され、一致を検出すると選択回路４を分岐命令発生回路側に切り替え、ＲＯＭからではなく、分岐命令発生回路により生成される分岐命令コードを命令解読器へ供給する。前記分岐命令発生回路では分岐命令の命令オペレーションコードと、それに続くオペランドとして分岐アドレスレジスタに格納される値を発生する。すなわちＣＰＵは修正プログラムの開始番地への分岐命令を解読・実行する事になり、結果として修正プログラムを実行することになる。
【００１１】
【発明が解決しようとする課題】
しかしながら従来のプログラム変更装置には下記のような問題があった。
【００１２】
第１の従来例では、比較回路３２、修正アドレスレジスタ３１、修正命令レジスタ３３からなる一組のプログラム変更装置で修正可能な命令は一箇所のアドレスに対応する命令コード（例えば８ビットマイクロコンピュータでは１バイトの命令コード）のみである。プログラム変更装置と修正命令コードが１対１に対応する為、複数の命令コードを修正可能とするには複数組のプログラム変更装置を実装する必要がある。通常は８組から１６組程度実装される場合が多い。一般的な８ビットマイクロコンピュータでは１６ビット〜２４ビット、１６ビットマイクロコンピュータでは２４ビット〜３２ビットのアドレス線を有している。すなわち前記プログラム変更装置の比較回路及び修正アドレスレジスタはアドレス線と同じビット幅を備える必要があり、またそれらと同じ数の修正命令レジスタ（一組あたりのビット幅は一般的には８ビットマイクロコンピュータの場合は８ビット、１６ビットマイクロコンピュータの場合は１６ビット）が必要となり、複数組備えるとなると回路規模を増大するという問題を生じる。また逆に修正プログラムの大きさは実装されるプログラム変更装置の組数に制限されてしまうという問題もある。
【００１３】
第２の従来例では、一般的な割込を用いて修正プログラムを実行させる方式である為、プログラムカウンタ１やプログラム状態語ＰＳＷ（図示せず）のスタックへの退避動作を伴う。従ってその為のスタック領域の確保が必要であり、ＲＡＭを浪費するという問題がある。またスタックへの退避動作の為の時間が必要となり、実行までの時間的なロスを発生する。この事はスピードを要する処理に取っては致命的になりかねない。更に、近年のマイクロコンピュータでは処理速度の高速化の為に命令の先読みという技術を用いられることが一般的で、ＲＯＭの読み出しの為のプリフェッチアドレスと、実際にＣＰＵが実行している命令の実行アドレスとは異なっている。その為プリフェッチアドレスと修正アドレスレジスタ３１の値を比較回路３２で比較して、一致した場合に割込を発生させ、修正プログラムを実行させたとしても正しくその命令を修正したこととはならないという問題を生じる。なぜなら、例えば一致を検出した時に実行中の命令が分岐命令であった場合修正アドレスレジスタで指定した命令を実行しない場合がある。従って命令先読み技術を利用したマイクロコンピュータにおいては実行アドレスとの比較が必要であるが、一般的には命令実行アドレスを保持するレジスタは実装されていない場合が多く、プログラム変更装置の為に前記実行アドレスレジスタを設けることは回路規模を増大させるという問題を生じる。
【００１４】
第３の従来例では、修正アドレスレジスタ３１とプログラムカウンタ１を比較回路３２で比較し一致した場合に分岐命令を発生するという方式であり、特定の分岐命令を発生させる為の分岐命令発生回路３６が必要となり回路規模を増大させるという問題がある。更に以下に示す問題も発生する。
【００１５】
近年のマイクロコンピュータでは命令のコードサイズを縮小する為に命令コードのビット長の基本単位をＲＯＭからの読み出しビット幅よりも小さくする場合がある。図７は縮小化命令コードのフォーマットの一例を示す。例えば図は１６ビットマイクロコンピュータであるとする。一般的な１６ビットマイクロコンピュータでは命令コードのビット長の基本単位は１６ビットとなり、命令オペレーションコードとそれに続くオペランドを合わせた命令の全ビット長は１６ビットの倍数になる。また一般的な１６ビットマイクロコンピュータではＲＯＭからの命令の読み出しを１６ビット幅で行う為、連続する命令の境界が読み出したＲＯＭデータの中間に存在することはあり得ない。しかし縮小化命令コードのマイクロコンピュータでは図７（ａ）の命令ｎに示すように命令オペレーションコードが１６ビット（Ｍ０〜Ｍ１の２バイト）で続くオペランドが２４ビット（Ｍ２〜Ｍ４の３バイト）であるような場合が存在する。この場合の命令コードの全ビット長は４０ビット（Ｍ０〜Ｍ４の５バイト）となり１６ビット（２バイト）の整数倍にはならない。このような場合ＲＯＭからの読み出しが１６ビット幅であると図７（ｂ）に示すように読み出したＲＯＭデータの中間に連続する命令の境界が存在する場合が存在する。同様のことが８ビットマイクロコンピュータや３２ビットマイクロコンピュータでも存在し得る。ＲＯＭへの命令フェッチアドレスだけを比較して命令コードを分岐命令のコードにすり替える従来の方式では、読み出しデータの中間を命令の境界として分岐命令を生成する事は不可能である。なぜなら分岐命令に同梱される修正命令直前の命令の最終コードを一意に決める事ができないからである。
【００１６】
本発明は前述の課題を解決し、
（１）回路規模の増大を最小限に留め、
（２）修正プログラムの大きさの制限を緩和し、
（３）修正プログラムの実行を開始するまでの時間遅れを最小限に留め、
（４）命令先読み技術を用いたマイクロコンピュータでも修正箇所のアドレスを直接指定可能で、
（５）縮小化命令を用いたマイクロコンピュータでも修正箇所のアドレスを直接指定可能なマイクロコンピュータのプログラム変更装置を提供する事で、ＲＯＭに固定記憶された命令の修正をマイクロコンピュータの製造後に可能ならしめる事を目的とする。
【００１７】
【課題を解決するための手段】
前述の課題を解決するために本発明のプログラム変更装置は、修正アドレスレジスタと比較回路と一致検出手段を備え、ＲＯＭフェッチアドレスと修正アドレスレジスタの値を比較回路で比較し、その結果を命令解読器へ送出し、命令解読器では一致検出手段にて比較回路での一致を検出するとマイクロ命令の実行によりＲＡＭ上の所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させるという構成を有している。これにより
（１）回路規模の増大を最小限に留め、
（２）修正プログラムの大きさの制限を緩和し、
（３）修正プログラムの実行を開始するまでの時間遅れを最小限に留め、
（４）命令先読み技術を用いたマイクロコンピュータでも修正箇所のアドレスを直接指定可能で、
（５）縮小化命令を用いたマイクロコンピュータでも修正箇所のアドレスを直接指定可能なマイクロコンピュータのプログラム変更装置が得られる。
【００１８】
【発明の実施の形態】
本発明の請求項１に記載の発明は、修正アドレスレジスタと比較回路と一致検出手段を備え、ＲＯＭフェッチアドレスと修正アドレスレジスタの値を比較回路で比較し、その結果を命令解読器へ送出し、命令解読器では一致検出手段にて比較回路での一致を検出するとマイクロ命令の実行によりＲＡＭ上の所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させる様にしたもので、プログラム変更装置を実現する為に必要な回路規模を最小限に留めることができるという作用を有する。
【００１９】
本発明の請求項２に記載の発明は、比較回路からの一致信号を命令の解読タイミングまで保持するようにしたもので、命令先読み技術を用いたマイクロコンピュータで実行アドレスと、ＲＯＭ読み出しアドレスが異なる場合でも、単にＲＯＭ読み出しアドレスとの比較を行うだけで、該当命令の実行時に修正が可能であるという作用を有する。
【００２０】
本発明の請求項３に記載の発明は、修正アドレス記憶手段と比較回路を複数組備えたものであり、複数箇所のプログラムの修正が可能であるという作用を有する。
【００２１】
本発明の請求項４に記載の発明は、修正アドレス記憶手段と比較回路を複数組備え、更に比較回路の一致出力信号をデコードした信号を命令の解読タイミングまで保持するようにしたもので、前述の請求項１から請求項３までの作用に加え、修正箇所を複数にした場合でも、一致信号の保持に必要な回路規模を最小限に留めることができるという作用を有する。
【００２２】
本発明の請求項５に記載の発明は、一致信号を命令コードの転送に同期して転送するもので、一致信号の転送タイミングと命令コード転送タイミングを共用化できるという作用を有する。
【００２３】
本発明の請求項６に記載の発明は、一致信号を直接命令解読器に入力するようにしたもので、一致の検出を容易に実現できるという作用を有する。
【００２４】
本発明の請求項７に記載の発明は、一致の検出手段として命令解読器に入力される命令レジスタとマイクロアドレスポインタに特定の値を設定するようにしたもので、命令解読器への入力信号を増加させることなく一致の検出ができるという作用を有する。
【００２５】
本発明の請求項８に記載の発明は、一致信号のデコード値を直接ＲＡＭアドレスの一部として使用するようにしたもので、修正プログラムの開始アドレス取得手段としてのアドレス発生回路の回路規模を増大させることなく容易に実現できるという作用を有する。
【００２６】
本発明の請求項９に記載の発明は、修正が必要な命令の解読タイミングで一致の検出を行うようにしたもので、縮小化命令コードを用いたマイクロコンピュータであっても、ＲＯＭ読み出しアドレスとの比較を行う事で、該当命令の修正が可能であるという作用を有する。
【００２７】
以下本発明の実施例について、図面を参照しながら説明する。
図１は本発明の一つの実施例を示すブロック図であり、１はプログラムカウンタ、２はプログラムが格納されるＲＯＭ、３１は修正アドレスレジスタ、３２は比較回路、５は命令解読器、６はＲＡＭ、７は一致信号である。修正アドレスレジスタ３１と比較回路３２からなるプログラム変更装置は複数の命令を修正するために複数組実装される（３ａ〜３ｎ）。プログラムカウンタ１とＲＯＭ２、比較回路３２及びＲＡＭ６はアドレスバスにより接続され、ＲＯＭ２と命令解読器５及びＲＡＭ６はデータバスにより接続される。
【００２８】
修正アドレスレジスタ３１にはＲＯＭ２に格納される一連の命令コードの修正箇所（不具合箇所）のアドレスを格納する。修正箇所が複数行に及ぶ場合は、その修正箇所の先頭の命令コードが格納されるアドレスを格納する。
【００２９】
比較回路３２は修正アドレスレジスタに格納されたアドレス値とＲＯＭ２に格納された命令コードを読み出すためにプログラムカウンタ１からアドレスバスに出力されたアドレス値とを比較し、両アドレス値の一致を検出すると一致信号７を出力する。
【００３０】
通常マイクロコンピュータは、プログラムカウンタ１によりアドレス指示されたデータをＲＯＭ２から順次読み出し、読み出したデータ中の命令オペレーションコードを命令解読器５で解読し、マイクロ命令を起動することで各種動作を実行する。一般的なマイクロコンピュータではＲＯＭ２とＲＡＭ６が同一のメモリ空間に配置されることが多く、マイクロコンピュータに内蔵されるＲＡＭにはＣＰＵ（図示せず）の実行に必要な情報がデータとして格納保持されることが多いが、プログラムカウンタ１がＲＡＭ６上のアドレスを指示する事で、ＲＡＭ６上の命令コードを実行することも可能である。
【００３１】
次に本プログラム変更装置にてＲＯＭに固定記憶された命令を修正する方法について説明する。
（１）ＲＯＭ２上に固定記憶されたプログラムに不具合や仕様変更等の理由により修正の必要が生じた場合、その被修正命令コード、又は一連の被修正プログラムの先頭の命令コードが格納されるアドレス値を修正アドレスレジスタ３１に格納する。
（２）修正プログラムをＲＡＭ６に格納する。
（３）ＲＡＭ６に格納された修正プログラムの開始アドレスを、ＲＡＭ６上の予め決められた所定のアドレスに格納する。
【００３２】
以上の操作をマイクロコンピュータのリセットスタート時に外部の不揮発性メモリ等から、マイクロコンピュータに一般的に装備されるシリアルインターフェースやパラレルインタフェース等を介して必要なデータを読み込む事で行う。
【００３３】
これらの動作は予めＲＯＭ２上に、外部の不揮発性メモリの特定のアドレスに記憶されたデータの状態や、マイクロコンピュータの端子の状態により、マイクロコンピュータのリセットスタート後起動される初期設定プログラムの中で起動されるようなプログラムを組み込んでおけばよい。
【００３４】
上記の設定がなされたマイクロコンピュータが動作中に、被修正命令コードの読み出し動作を行うと、比較回路３２により修正アドレスレジスタに格納されたアドレス値との一致が検出され、一致信号を出力する。
【００３５】
一致信号は命令解読器５に入力され、命令オペレーションコードの解読タイミングに前記命令解読器５に備えられた一致信号検知手段により一致が検知され、解読しようとする命令オペレーションコードが被修正命令コードである事を検知すると以下の動作を行うマイクロ命令を起動する。
（１）ＲＡＭ６上の所定のアドレスから修正プログラムの開始アドレス値を取得する。
（２）取得した開始アドレス値に無条件分岐し、プログラムカウンタ１にそのアドレス値を設定する。
【００３６】
以下プログラムカウンタ１を順次インクリメント（又はデクリメント）する事でＲＡＭ６上に格納された修正プログラムを読み出し、実行する。
【００３７】
修正プログラムの最後でＲＯＭ２上のアドレスへの分岐命令を実行させることで一連のプログラム修正を完了させる。
【００３８】
修正アドレスレジスタ３１と比較回路３２からなるプログラム変更装置が１組につき一箇所のプログラム修正が可能である。従ってプログラム変更装置を複数組（３ａ〜３ｎ）備えることにより、複数箇所のプログラムの修正が可能である。通常は２〜４組程度実装すれば十分である。
【００３９】
一般的にプログラム変更装置の組数が増大すると一致信号の本数も増大し、一致信号の保持手段や、命令解読器における一致の検知手段の回路規模が増大する。そこで回路規模の増大を最小限に留める為に以下の対策を行う。
【００４０】
図２は本発明におけるプログラム変更装置と一致信号出力手段を示すブロック図である。本図に於いてはプログラム変更装置が３組（２２−１）の場合について示すが、プログラム変更装置の組数が最大（２ｎ−１）組の場合についても同様である。
【００４１】
図２（ａ）において３ａ〜３ｃは３組のプログラム変更装置、３１ａ〜３１ｃは修正アドレスレジスタ、３２ａ〜３２ｃは比較回路、７ａ〜７ｃは一致信号、８はデコーダ、８１、８２は一致デコード信号である。
【００４２】
修正アドレスレジスタ３１ａ、３１ｂにＲＯＭ上の修正が必要な命令コードが格納されるアドレスを設定し、比較回路３２ａ〜３２ｃを用いてアドレスバス上に出力された命令フェッチアドレスとの比較を行っている。命令フェッチアドレスと修正アドレスレジスタの値が一致すると比較回路３２ａ〜３２ｃは一致信号７ａ〜７ｃを出力する。マイクロコンピュータの命令実行により修正アドレスレジスタへのデータの書き込みや、読み出しが可能な事は言うまでもない。
【００４３】
デコーダ８は前記一致信号７ａ〜７ｃを受け、図２（ｂ）に示す真理値表に従って一致デコード信号８１、８２に変換する。具体的にはどの比較回路も一致信号を出力していない場合は一致デコード信号として（一致デコード信号８２、一致デコード信号８１）＝（０、０）を、比較回路３２ａが一致信号を出力している場合は（０、１）を、比較回路３２ｂが一致信号を出力している場合は（１、０）を、比較回路３２ｃが一致信号を出力している場合は（１、１）を出力する。本真理値表では、プログラム変更装置の性格上複数の修正アドレスレジスタ３１ａ〜３１ｃに同じ修正アドレスを指定することを想定していないが、必要であれば複数の一致信号７ａ、７ｂが同時に出力された場合は一致デコード信号として優先順位を付ければよい。例えば番号の若い比較回路の一致出力を優先する事等が考えられる。この場合は比較回路３２ａと３２ｂが一致信号を出力している場合は（一致デコード信号８２、一致デコード信号８１）＝（０、１）の一致デコード信号を出力すればよい。なお優先順位の付け方は任意である。またデコードの割り当ても任意に構成可能であるが、いずれの比較回路も一致信号を出力しない場合に全ての出力が同一（全て０又は全て１）になるようにする事が好ましい。
【００４４】
前述のような一致デコード信号を作成することにより、後述するように命令解読器における保持手段及び一致の検出手段が容易に構成できる。
【００４５】
図３は本発明の命令解読器の一つの実施例である。
図に於いて８０はｎ本の一致デコード信号であり、図２の実施例の場合は８１、８２の２本になる。９はＰＬＡで、９１はＰＬＡを構成するＡＮＤ部、９２はＯＲ部、Ａ０は命令レジスタ、Ａ１は命令キュー、Ｂ０及びＢ１は命令と同じタイミングで一致デコード信号を保持する一致デコード信号保持手段、Ｄはマイクロコンピュータの各部を制御し命令を実行させる制御信号である。
【００４６】
本実施例は命令先読み技術を用いたマイクロコンピュータにおける命令解読器を示す。通常プリフェッチアドレスにより指示され、読み出された命令コードはデータバスを経由して命令キューＡ１に格納される。次に命令解読タイミングに命令キューに格納された命令コードが命令レジスタに転送される。命令レジスタに格納された命令コードはＰＬＡのＡＮＤ部９１へ入力し、解読されＰＬＡのＯＲ部９２よりマイクロコンピュータの各部を制御する制御信号Ｄが出力され、各命令の実行を行う。
【００４７】
プログラムの変更を行う場合は下記の動作を行う。
（１）図２の実施例に示したようなプログラム変更装置により、所望の修正アドレスとプリフェッチアドレスの比較を行い、一致した場合に出力される一致信号をデコードした一致デコード信号８０を、プリフェッチされた命令コードが命令キューに格納されるのと同時に一致デコード信号保持手段Ｂ１に格納する。
（２）次に命令コードが命令レジスタに転送されるのと同時に一致デコード信号保持手段Ｂ０に転送し、命令解読タイミングに命令コードがＰＬＡのＡＮＤ部９１に入力されるのと同時に一致デコード信号保持手段Ｂ０に格納される一致デコード信号をＰＬＡのＡＮＤ部９１に入力する。
（３）ＰＬＡでは一致デコード信号が入力されると、（図２の実施例では（０、１）、（１、０）、（１、１））命令コードの種別に無関係に以下の動作を実行するマイクロプログラムを起動する。
【００４８】
（ａ）ＲＡＭ上の所定のアドレスから修正プログラムの開始アドレス値を取得する。
【００４９】
（ｂ）取得した開始アドレス値に無条件分岐し、プログラムカウンタにそのアドレス値を設定する。
（４）以下プログラムカウンタを順次インクリメント（又はデクリメント）する事でＲＡＭ上に格納された修正プログラムを読み出し、実行する。
（５）修正プログラムの最後でＲＯＭ上のアドレスへの分岐命令を実行させることで一連のプログラム修正を完了させる。
【００５０】
なお本実施例では一致デコード信号を命令解読タイミングまで保持し、ＰＬＡのＡＮＤ部に入力したが、デコードをしていない一致信号を命令解読タイミングまで保持し直接入力しても良い。
【００５１】
また本実施例では一致デコード信号をｎ本そのままＰＬＡのＡＮＤ部９１に入力するように構成したが、図２の実施例のデコーダでは一致が生じた場合にはいずれかのビットが’１’となるため、ｎ本の一致デコード信号をＯＲゲートに入力し、１本の信号に集約する事で更に構成を簡単にできる。
【００５２】
図４は本発明の命令解読器の別の実施例である。
図に於いて８０はｎ本の一致デコード信号であり、図２の実施例の場合は８１、８２の２本になる。９はＰＬＡで、９１はＰＬＡを構成するＡＮＤ部、９２はＯＲ部、Ａ０は命令レジスタ、Ａ１は命令キュー、Ｂ０及びＢ１は命令と同じタイミングで一致デコード信号を保持する一致デコード信号保持手段、Ｃはマイクロアドレスポインタ、Ｄはマイクロコンピュータの各部を制御し命令を実行させる制御信号、Ｅはマイクロアドレス制御信号である。
【００５３】
一般的なマイクロコンピュータでは命令解読器にマイクロコード技術を用いられる事が多い。この場合ハードウエアとしてはＰＬＡが用いられ、ＰＬＡのＡＮＤ部入力には命令レジスタ値とマイクロアドレスポインタ値が入力される。またマイクロアドレスポインタは一つ前の状態によりマイクロアドレス制御信号にて決定される。すなわち命令レジスタ値とマイクロポインタ値で各命令の実行状態が決められる。
【００５４】
本実施例では図３の実施例と同様に、下記の動作を行う。
（１）所望の修正アドレスとプリフェッチアドレスの比較を行い、一致した場合に出力される一致信号をデコードした一致デコード信号８０を、プリフェッチされた命令コードが命令キューに格納されるのと同時に一致デコード信号保持手段Ｂ１に格納する。
（２）次に命令コードが命令レジスタに転送されるのと同時に一致デコード信号保持手段Ｂ０に転送し、一致を示す場合（図２の実施例では（０、１）、（１、０）、（１、１））は命令レジスタとマイクロアドレスポインタを特定の値に設定し、その値をＰＬＡのＡＮＤ部９１に入力する。
（３）ＰＬＡでは前記特定の値が入力されると、以下の動作を実行するマイクロプログラムを起動する。
【００５５】
（ａ）ＲＡＭ上の所定のアドレスから修正プログラムの開始アドレス値を取得する。
【００５６】
（ｂ）取得した開始アドレス値に無条件分岐し、プログラムカウンタにそのアドレス値を設定する。
（４）以下プログラムカウンタを順次インクリメント（又はデクリメント）する事でＲＡＭ上に格納された修正プログラムを読み出し、実行する。
（５）修正プログラムの最後でＲＯＭ上のアドレスへの分岐命令を実行させることで一連のプログラム修正を完了させる。
【００５７】
命令レジスタ及びマイクロアドレスポインタを特定のアドレスに設定する方法としては、それぞれをセット又はリセット付きのレジスタで構成し、一致デコード信号で制御しても良いし、またはそれぞれの出力にＡＮＤゲートやＯＲゲートを挿入して一致デコード信号でゲートしても良い。
【００５８】
図３及び図４に示した実施例では一致デコード信号を命令コードの解読タイミングまで保持する手段を有するため、変更命令の格納されるアドレスは単にプリフェッチアドレスと比較すればよく、プリフェッチアドレスは通常アドレスバスに出力されている為、修正アドレスレジスタとアドレスバスの比較を行うだけでよい為、プログラム変更装置の構成を容易にできる。
【００５９】
前述の実施例では命令解読器の構成をＰＬＡを用いて実現してあるが、ランダムロジックを用いても構成が可能なことは言うまでもない。
【００６０】
また命令プリフェッチ時の命令キューは１段の場合について説明したが、２段以上の場合についても同様である。
【００６１】
本発明のプログラム変更装置では被修正命令の実行サイクルで、マイクロプログラムの実行により
・ＲＡＭ上の所定のアドレスから修正プログラムの開始アドレス値の取得
・取得した開始アドレス値に無条件分岐し、プログラムカウンタにそのアドレス値を設定
の動作を行うが、図５はこの時に修正プログラムの開始アドレスを格納するＲＡＭ上のアドレスを生成する手段の実施例を示す。
【００６２】
図において８はデコーダ、Ｂ０及びＢ１は命令と同じタイミングで一致デコード信号を保持する一致デコード信号保持手段であり、図３及び図４に示した実施例の一部分と同一である。
【００６３】
また図６は修正プログラムの開始アドレスを格納するＲＡＭ空間とアドレス信号のビット構成を示す。
【００６４】
図６（ａ）においてＦ０からＦ２は３組のプログラム変更装置に対応する修正プログラムの開始アドレス格納領域である。
【００６５】
本実施例では簡単化の為に修正プログラムを格納するＲＡＭのアドレス空間を２１６バイト（アドレス信号線は１６ビット）、プログラム変更装置は図２に示す様に３組であるとするが、アドレス信号線及びプログラム変更装置の組数は任意の場合でも同様に考えることができる。
【００６６】
ＲＡＭ空間のアドレス信号線が１６ビットである為、図６（ａ）に示す様に修正プログラムの開始番地を格納する１６ビット（２バイト）の領域を３組確保する。本実施例では領域Ｆ０（Ｘ’０２０２’とＸ’０２０３’番地）に図２（ａ）のプログラム変更装置３ａの修正プログラム開始アドレスを、同様に領域Ｆ１（Ｘ’０２０４’とＸ’０２０５’番地）にプログラム変更装置３ｂの修正プログラム開始アドレスを、領域Ｆ２（Ｘ’０２０６’とＸ’０２０７’番地）にプログラム変更装置３ｃの修正プログラム開始アドレスを格納する。
【００６７】
一般的な１６ビットマイクロコンピュータではＲＡＭ空間へのアクセスを１６ビット単位で行うことができる。この場合は修正プログラムの開始アドレスを取得する為には一致信号を出力したプログラム変更装置３ａ〜３ｃのいずれかに従って単にＸ’２０２’番地又はＸ’２０４’番地又はＸ’０２０６’番地のデータを１６ビット単位で読み出せばよい。これらのアドレスは図６（ｂ）に示すように１６ビットのアドレス信号線のうち上位の１５ビット（ビット３〜ビット１５）には固定値ｂ’００００００１０００００’を次の２ビット（ビット１〜ビット２）は図２（ｂ）のデコーダに従う一致デコード信号を、最後の１ビット（ビット０）は固定値ｂ’０’を出力すればよい。一致デコード信号は図５に示す様に修正プログラムの開始番地取得タイミングで一致デコード信号保持手段Ｂ０に格納されるデータをアドレスバスに出力するだけでよく、容易に回路を構成できる。
【００６８】
また８ビットマイクロコンピュータの様に一度に８ビットのデータしかアクセスできない場合は、８ビットデータを２回取得すればよく、図６（ｂ）の最下位ビット（ビット０）を固定値ではなく、１度目のアドレス取得でｂ’０’を、２度目のアドレス取得でｂ’１’を出力する事で解決できる。
【００６９】
なお本実施例では一致デコード信号をビット１〜ビット２の２ビットに出力するようにしたが、修正プログラム開始アドレス格納領域の構成や、ＲＡＭ空間のアドレスビット幅、マイクロコンピュータの扱えるデータのビット幅（４ビット、８ビット、１６ビット、３２ビット、６４ビット等）により任意のビット位置に出力する構成が考えられる。
【００７０】
また図２（ｂ）のデコーダの構成により一致デコード信号がｂ’００’の場合はどのプログラム変更装置も一致信号を出力しない場合に割り当てた為、Ｘ’０２００’〜Ｘ’０２０１’番地は未使用としたが、デコーダの構成が変われば、割り当てる修正プログラム開始アドレス格納領域のアドレスも変わってくる事は言うまでもない。
【００７１】
図７は縮小化命令コードのフォーマットを示す。例えば図は１６ビットマイクロコンピュータであるとする。この場合の縮小化命令コードの基本単位は８ビットであり、命令ｎは命令オペレーションコードが１６ビット（Ｍ０〜Ｍ１の２バイト）、オペランドが２４ビット（Ｍ２〜Ｍ４の３バイト）であるとする。また続く命令ｎ＋１は命令オペレーションコードが同じく１６ビット（Ｎ０〜Ｎ１の２バイト）、オペランドが１６ビット（Ｎ２〜Ｎ３の２バイト）であるとする。この場合図７（ｂ）に示す様に命令ｎがＸ’０１００’番地から格納されているとすると、Ｘ’０１０４’番地には命令ｎの最終コードＭ４が、Ｘ’０１０５’番地には命令ｎ＋１の最初のコードＮ０が格納される事になる。一般的な１６ビットマイクロコンピュータでは命令を１６ビット単位でフェッチする為、Ｘ’０１０４’番地とＸ’０１０５’番地はアドレスＸ’０１０４’番地のデータとして同時にフェッチされる事になる。
【００７２】
例えば被修正命令が命令ｎ＋１であった場合、修正アドレスレジスタにはＸ’０１０４’を格納する事になる。従って命令の境界が命令フェッチ単位の境界に無い場合は被修正命令の先頭を含むフェッチデータのアドレスを修正アドレスレジスタに指定する。
【００７３】
前述の例では１６ビットマイクロコンピュータの場合についての場合であるが、松下電子工業製の８ビットマイクロコンピュータＭＮ１０１シリーズのように８ビットマイクロコンピュータでありながら命令コードのフォーマットの基本単位が４ビットのマイクロコンピュータもある。また３２ビットや６４ビット以上のマイクロコンピュータでも同様である。
【００７４】
図７の例のように被修正命令が命令ｎ＋１で、修正アドレスレジスタ値がＸ’０１０４’の場合、図３又は図４に示す命令キューＡ１には命令ｎの最終コードＭ４と、命令ｎ＋１の先頭コードＮ０が格納され、一致デコード保持手段Ｂ１には一致デコード信号が格納される。縮小化命令コードを用いるマイクロコンピュータでは命令解読器に於いて命令レジスタに命令キューから命令オペレーションコードを格納するときに、該当命令の命令オペレーションコードのみを抽出格納する手段を有している（図示せず）。
【００７５】
従って命令キューＡ１から命令オペレーションコードのみを抽出し、命令レジスタＡ０に格納するタイミングで一致デコード信号を一致デコード信号保持手段Ｂ１からＢ０に転送すればよく、転送後は前述のとおりに一致を検出し、マイクロプログラムの実行により
（１）ＲＡＭ上の所定のアドレスから修正プログラムの開始アドレス値の取得
（２）取得した開始アドレス値に無条件分岐し、プログラムカウンタにそのアドレス値を設定
の動作を行い同様にプログラムの変更が可能となる。
【００７６】
従って本発明によると、命令コードのフォーマットの如何に関わらず被修正命令の実行サイクルでその命令の修正が可能である。
【００７７】
【発明の効果】
以上の様に本発明は、ＲＡＭに格納される修正プログラムの開始アドレスを同ＲＡＭ内の予め定められた所定のアドレスに格納し、所望の修正箇所のアドレスを格納する為の修正アドレス記憶手段を有し、命令をフェッチアドレスと修正アドレス記憶手段に格納されたアドレスとを比較し、一致した場合に一致信号を出力する比較回路と複数の比較回路の一致出力をデコードする回路を具備し、更にＣＰＵの命令解読器には、前記比較回路が一致信号を出力した事を検知する手段を備え、一致信号を検知すると前記命令解読器はマイクロ命令の実行により前記ＲＡＭの所定のアドレスから修正プログラムの開始アドレスを取得し、プログラムの実行を同ＲＡＭ内の修正プログラムの開始番地へ分岐させるような構成を設ける事により、
（１）回路規模の増大を最小限に留め、
（２）修正プログラムの大きさの制限を緩和し、
（３）修正プログラムの実行を開始するまでの時間遅れを最小限に留め、
（４）命令先読み技術を用いたマイクロコンピュータでも修正箇所のアドレスを直接指定可能で、
（５）縮小化命令を用いたマイクロコンピュータでも修正箇所のアドレスを直接指定可能な優れたマイクロコンピュータのプログラム変更装置を実現できるものである。
【図面の簡単な説明】
【図１】実施例全体を示すブロック図
【図２】プログラム変更装置と一致信号出力手段の実施例を示す図
【図３】命令解読器の第１の実施例を示す図
【図４】命令解読器の第２の実施例を示す図
【図５】アドレス生成手段を示す図
【図６】修正プログラム開始アドレス格納領域を示す図
【図７】縮小化命令コードの一例を示す図
【図８】第１の従来例を示す図
【図９】第２の従来例を示す図
【図１０】第３の従来例を示す図
【符号の説明】
１  プログラムカウンタ
２  ＲＯＭ
３、３ａ〜３ｎ  プログラム変更装置
３１  修正アドレスレジスタ
３２  比較回路
３３  修正命令レジスタ
３４  割込ベクタレジスタ
３５  分岐アドレスレジスタ
３６  分岐命令発生回路
４  選択回路
５  命令解読器
６  ＲＡＭ
７、７ａ、７ｂ  一致信号
８  デコーダ
８１、８２  一致デコード信号
９  ＰＬＡ
９１  ＰＬＡのＡＮＤ部
９２  ＰＬＡのＯＲ部
Ａ０  命令レジスタ
Ａ１  命令キュー
Ｂ０、Ｂ１  一致デコード信号保持手段
Ｃ  マイクロアドレスポインタ
Ｄ  制御信号
Ｅ  マイクロアドレス制御信号
Ｆ０、Ｆ１、Ｆ２  修正プログラム開始アドレス格納領域
【図１】
0003588951.tif 000002
【図２】
0003588951.tif 000003
【図３】
0003588951.tif 000004
【図４】
0003588951.tif 000005
【図５】
0003588951.tif 000006
【図６】
0003588951.tif 000007
【図７】
0003588951.tif 000008
【図８】
0003588951.tif 000009
【図９】
0003588951.tif 000010
【図１０】
0003588951.tif 000011