(57)【要約】【課題】内蔵不揮発性メモリプログラム又はデータの訂正を可能としながら、プログラム又はデータの読み出しに対するセキュリティ向上を図る。【解決手段】マイクロコンピュータ100において、比較部160は内蔵不揮発性メモリ120の訂正したいアドレスを記憶する訂正アドレス記憶手段140の値とＣＰＵ110がアクセス中のアドレスとを比較する。比較結果記憶手段170は前記比較手段が出力する比較結果を記憶する。データ変換部180は、前記比較結果記憶手段が記憶する比較結果が一致の場合、内蔵不揮発性メモリ120から読み出されるプログラム又はデータを無効化する。【選択図】図１
2007026231.tif 000002
【特許請求の範囲】
【請求項１】
プログラムおよびデータを格納する記憶領域を有する不揮発性メモリと、
前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを記憶する訂正アドレス記憶手段と、
前記不揮発性メモリに格納されるデータから訂正したいデータを記憶する訂正データ記憶手段と、
現在アクセスされる前記不揮発性メモリのアドレスと前記訂正アドレス記憶手段とが記憶する訂正アドレスと一致するか否かを比較する比較手段と、
前記比較手段の比較結果を記憶する比較結果記憶手段と、
前記比較手段の比較結果および、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを前記訂正データ記憶手段が記憶する訂正データに変換し、前記比較結果記憶手段が記憶する比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するデータ変換手段と、
前記不揮発性メモリにアクセスし、この不揮発性メモリが格納するプログラム又はデータを前記データ変換手段を介して読み出す制御部と
を備えたマイクロコンピュータ。
【請求項２】
請求項１記載のマイクロコンピュータにおいて、
前記不揮発メモリは複数個の記憶領域を有し、
前記実行しているプログラムが前記不揮発性メモリの特定の記憶領域に格納されたプログラムであるか否かを判定する空間判定手段を備え、
前記データ変換手段は、前記空間判定手段の判定結果を受け、この判定結果が前記不揮発性メモリの特定の記憶領域に格納されたプログラムである場合には、前記比較結果記憶手段が記憶する比較結果が一致であるときにも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化しないよう構成した
マイクロコンピュータ。
【請求項３】
請求項１記載のマイクロコンピュータにおいて、
前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、
前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成した
マイクロコンピュータ。
【請求項４】
請求項１記載のマイクロコンピュータにおいて、
前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン分岐命令であるか否かを解読する解読手段を備え、
前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン分岐命令でないとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成した
マイクロコンピュータ。
【請求項５】
請求項１記載のマイクロコンピュータにおいて、
前記制御部の実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する空間判定手段と、
前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段とを備え、
前記比較結果記憶手段は前記比較手段の比較結果を記憶し、前記空間判定手段の判定結果および前記フェッチ判定手段の判定結果を受け、前記空間判定手段の判定結果が前記不揮発性メモリに格納されたプログラムでなく、かつ、前記フェッチ判定手段の判定結果がオペランドフェッチであったときには、記憶する比較結果を無効化して出力し、それ以外のときには、記憶する比較結果をそのまま出力するよう構成した
マイクロコンピュータ。
【請求項６】
請求項１記載のマイクロコンピュータにおいて、
前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン復帰命令であるか否かを解読する解読手段を備え、
前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン復帰命令のときには記憶する比較結果をリセットするよう構成した
マイクロコンピュータ。
【請求項７】
請求項１記載のマイクロコンピュータにおいて、
前記制御部が、前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを実行した直後に、実行（復帰）する前記不揮発性メモリに該当するアドレスを記憶する復帰アドレス記憶手段と、
前記制御部が前記不揮発性メモリに対してアクセスするときに出力するアドレスと、前記復帰アドレス記憶手段が記憶するアドレスとを比較する第２の比較手段を備え、
前記比較結果記憶手段は、前記第２の比較手段の比較結果を受け、この比較結果が一致したとき、記憶する比較結果をリセットするよう構成した
マイクロコンピュータ。
【請求項８】
請求項７記載のマイクロコンピュータにおいて、
前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、
前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるときには、記憶する比較結果をリセットしないよう構成した
マイクロコンピュータ。
【請求項９】
請求項１記載のマイクロコンピュータにおいて、
随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、
前記読み出しアドレス記憶手段は、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記書き換えを行わないよう構成した
マイクロコンピュータ。
【請求項１０】
請求項１記載のマイクロコンピュータにおいて、
随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する、前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、
前記読み出しアドレス記憶手段の書き換え時に、前記比較結果記憶手段が記憶する比較結果を記憶する書き換え条件記憶手段とを備え、
前記データ変換手段は、前記ダイレクトメモリアクセス手段が読み出しを行う際には、前記書き換え条件記憶手段の記憶する比較結果を受け、前記書き換え条件記憶手段の記憶する比較結果が一致の場合にも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するよう構成した
マイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロコンピュータに関し、特に、不揮発性メモリを内蔵したマイクロコンピュータに格納されたプログラムの訂正に関するものである。
【背景技術】
【０００２】
従来、この種のプログラム訂正は、下記の（特許文献１）に記載されるように、予め外部メモリから内蔵揮発性メモリに訂正プログラムを転送しておき、訂正したいプログラムを、内蔵揮発性メモリに格納しておいた訂正プログラムにサブルーチン分岐するプログラムに置換することで実現するものである。
【特許文献１】特開平３−１８６９２７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、従来のプログラム訂正回路では、訂正したいプログラムを外部メモリから内蔵揮発性メモリに転送するため、外部メモリを改変された場合には内蔵揮発性メモリに格納したプログラムを簡単に読み出されてしまうという問題がある。
【０００４】
本発明はかかる課題に鑑み、その目的は、内蔵不揮発性メモリのプログラム訂正を可能にしつつ、不正ユーザに読み出されたくないプログラムおよびデータについては、その読み出しを不可能にするようにして、セキュリティ向上を図ることにある。
【課題を解決するための手段】
【０００５】
前記目的を達成するために、本発明では、内蔵不揮発性メモリのプログラムを訂正している状態を記憶し、その間、内蔵不揮発メモリからの読み出しを禁止する。
具体的には、本発明の請求項１記載のマイクロコンピュータは、プログラムおよびデータを格納する記憶領域を有する不揮発性メモリと、前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを記憶する訂正アドレス記憶手段と、前記不揮発性メモリに格納されるデータから訂正したいデータを記憶する訂正データ記憶手段と、現在アクセスされる前記不揮発性メモリのアドレスと前記訂正アドレス記憶手段とが記憶する訂正アドレスと一致するか否かを比較する比較手段と、前記比較手段の比較結果を記憶する比較結果記憶手段と、前記比較手段の比較結果および、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを前記訂正データ記憶手段が記憶する訂正データに変換し、前記比較結果記憶手段が記憶する比較結果が一致であるときには、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するデータ変換手段と、前記不揮発性メモリにアクセスし、この不揮発性メモリが格納するプログラム又はデータを前記データ変換手段を介して読み出す制御部とを備えたことを特徴とする。
【０００６】
この構成によると、内蔵不揮発性メモリのプログラムを訂正するときに、その状態を保持し、その間の内蔵不揮発性メモリからのプログラムやデータの読み出しが無効化されセキュリティを実現できる。
【０００７】
本発明の請求項２記載のマイクロコンピュータは、請求項１において、前記不揮発メモリは複数個の記憶領域を有し、前記実行しているプログラムが前記不揮発性メモリの特定の記憶領域に格納されたプログラムであるか否かを判定する空間判定手段を備え、前記データ変換手段は、前記空間判定手段の判定結果を受け、この判定結果が前記不揮発性メモリの特定の記憶領域に格納されたプログラムである場合には、前記比較結果記憶手段が記憶する比較結果が一致であるときにも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化しないよう構成したことを特徴とする。
【０００８】
この構成によると、内蔵不揮発性メモリを複数個の記憶領域で構成し、特定記憶領域については、プログラム訂正中にもプログラムやデータの読み出しが可能とすることで、訂正プログラム中で内蔵不揮発性メモリに格納されるデータの参照が可能となる。
【０００９】
本発明の請求項３記載のマイクロコンピュータは、請求項１において、前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成したことを特徴とする。
【００１０】
本発明の請求項４記載のマイクロコンピュータは、請求項１において、前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン分岐命令であるか否かを解読する解読手段を備え、前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン分岐命令でないとき、前記比較手段の比較結果が一致であっても、一致であることを記憶しないよう構成したことを特徴とする。
【００１１】
この構成によると、内蔵不揮発性メモリからのプログラムやデータの読み出しを無効化する状態を記憶するための条件を、プログラム訂正時に加えることで、本当に必要な場合のみ、内蔵不揮発性メモリからのプログラムやデータの読み出しが無効化することで、不必要な無効化の解除をする必要がなく、コードサイズを削減できる。
【００１２】
本発明の請求項５記載のマイクロコンピュータは、請求項１において、前記制御部の実行しているプログラムが前記不揮発性メモリに格納されたプログラムであるか否かを判定する空間判定手段と、前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段とを備え、前記比較結果記憶手段は前記比較手段の比較結果を記憶し、前記空間判定手段の判定結果および前記フェッチ判定手段の判定結果を受け、前記空間判定手段の判定結果が前記不揮発性メモリに格納されたプログラムでなく、かつ、前記フェッチ判定手段の判定結果がオペランドフェッチであったときには、記憶する比較結果を無効化して出力し、それ以外のときには、記憶する比較結果をそのまま出力するよう構成したことを特徴とする。
【００１３】
この構成によると、内蔵不揮発性メモリからのプログラムやデータの読み出しを無効化する条件を、プログラム訂正時に加えることで、プログラム訂正中にも、内蔵不揮発性メモリ内のルーチンを実行可能となる。
【００１４】
本発明の請求項６記載のマイクロコンピュータは、請求項１において、前記制御部は、前記データ変換手段を介して読み出したデータがサブルーチン復帰命令であるか否かを解読する解読手段を備え、前記比較結果記憶手段は、前記解読手段の解読結果を受け、この解読結果がサブルーチン復帰命令のときには記憶する比較結果をリセットするよう構成したことを特徴とする。
【００１５】
本発明の請求項７記載のマイクロコンピュータは、請求項１において、前記制御部が、前記不揮発性メモリに格納されるデータから訂正したいデータに該当するアドレスを実行した直後に、実行（復帰）する前記不揮発性メモリに該当するアドレスを記憶する復帰アドレス記憶手段と、前記制御部が前記不揮発性メモリに対してアクセスするときに出力するアドレスと、前記復帰アドレス記憶手段が記憶するアドレスとを比較する第２の比較手段を備え、前記比較結果記憶手段は、前記第２の比較手段の比較結果を受け、この比較結果が一致したとき、記憶する比較結果をリセットするよう構成したことを特徴とする。
【００１６】
この構成によると、特定の条件を満たした場合に自動的に、内蔵不揮発性メモリからのプログラムやデータの読み出しの無効化を解除できることで、無効化解除のためのコードサイズを削減できる。
【００１７】
本発明の請求項８記載のマイクロコンピュータは、請求項７において、前記制御部のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段を備え、前記比較結果記憶手段は、前記フェッチ判定手段の判定結果を受け、この判定結果がオペランドフェッチであるときには、記憶する比較結果をリセットしないよう構成したことを特徴とする。
【００１８】
この構成によると、無効化の解除を命令読み出しでしかできなくすることで、さらにセキュリティを向上させることができる。
本発明の請求項９記載のマイクロコンピュータは、請求項１において、随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、前記読み出しアドレス記憶手段は、前記比較結果記憶手段が記憶する比較結果を受け、前記比較手段の比較結果が一致であるときには、前記書き換えを行わないよう構成したことを特徴とする。
【００１９】
本発明の請求項１０記載のマイクロコンピュータは、請求項１において、随時バス制御に介入して、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段が記憶するアドレスに該当する、前記不揮発性メモリに格納されるプログラム又はデータの読み出しを行うダイレクトメモリアクセス手段と、前記読み出しアドレス記憶手段の書き換え時に、前記比較結果記憶手段が記憶する比較結果を記憶する書き換え条件記憶手段とを備え、前記データ変換手段は、前記ダイレクトメモリアクセス手段が読み出しを行う際には、前記書き換え条件記憶手段の記憶する比較結果を受け、前記書き換え条件記憶手段の記憶する比較結果が一致の場合にも、前記不揮発性メモリの記憶領域から読み出されるプログラム又はデータを無効化するよう構成したことを特徴とする。
【００２０】
この構成によると、マイクロコンピュータにダイレクトメモリアクセス手段を備える場合に、内蔵不揮発性メモリのプログラムを訂正するときに、その状態を保持し、その間のダイレクトメモリアクセス手段内の読み出しアドレス記憶手段にアドレスを設定することを禁止することで、セキュリティを実現できる。
【発明の効果】
【００２１】
本発明のマイクロコンピュータによれば、内蔵不揮発性メモリのプログラムを訂正するときに、その状態を保持し、その間の内蔵不揮発性メモリからのプログラムやデータの読み出しが無効化されるため、内蔵不揮発性メモリのプログラム訂正を可能にしつつ、不正ユーザに読み出されたくないプログラムおよびデータについては、その読み出しを不可能にするようにして、セキュリティを向上させることができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の各実施の形態を図１〜図９に基づいて詳細に説明する。
（実施の形態１）
図１は本発明の（実施の形態１）のマイクロコンピュータを示す。
【００２３】
マイクロコンピュータ100は、制御部としてのＣＰＵ110と、内蔵不揮発性メモリ120と、内蔵揮発性メモリ130と、訂正アドレス記憶手段としての訂正アドレスレジスタ140と、訂正データ記憶手段としての訂正データレジスタ150と、比較手段160と、比較結果記憶手段170と、データ変換手段180とによって構成されている。また、190は前記マイクロコンピュータ100の外部に接続された外部メモリである。
【００２４】
アドレスバスB101は、ＣＰＵ110と内蔵不揮発性メモリ120と内蔵揮発性メモリ130と比較手段160と外部メモリ190とを各々接続する。データバスB102は、ＣＰＵ110と内蔵揮発性メモリ130と訂正アドレスレジスタ140と訂正データレジスタ150とデータ変換手段180と外部メモリ190とを各々接続する。
【００２５】
ＣＰＵ110の出力の訂正アドレス書込み信号S107は、訂正アドレスレジスタ140に入力されている。訂正アドレスレジスタ140の出力の訂正アドレス信号S103は、比較手段160の一方に入力されている。
【００２６】
ＣＰＵ110の出力の訂正データ書込み信号S108は、訂正データレジスタ150に入力されている。 訂正データレジスタ150の出力の訂正データ信号S104は、データ変換手段180に入力されている。比較手段160の出力の一致信号S105は、比較結果記憶手段170とデータ変換手段180に入力されている。比較結果記憶手段170の出力の一致状態保持信号S106は、データ変換手段180に入力されている。
【００２７】
ＣＰＵ110の出力のリセット信号S109は、比較結果記憶手段170に入力されている。リード信号S112は、ＣＰＵ110から出力されて内蔵不揮発性メモリ120と内蔵揮発性メモリ130および外部メモリ190に入力されている。ライト信号S113は、ＣＰＵ110から出力されて内蔵揮発性メモリ130に入力されている。
【００２８】
内蔵不揮発性メモリ120とデータ変換手段180とは、ＲＯＭバスB111で接続されている。内蔵不揮発性メモリ120はプログラムおよびデータを格納しており、リード信号S112が‘１’であれば、アドレスバスB101のアドレスで指定されるメモリ領域に格納されているプログラムおよびデータをＲＯＭバスB111に出力する。
【００２９】
内蔵揮発性メモリ130はプログラムおよびデータを格納しており、リード信号S112が‘１’であれば、アドレスバスB101のアドレスで指定されるメモリ領域に格納されているプログラムおよびデータをデータバスB102に出力する。さらに、この内蔵揮発性メモリ130は、ライト信号S113が‘１’ならば、データバスB102のプログラムおよびデータを、アドレスバスB101のアドレスで指定されるメモリ領域に格納保持する。
【００３０】
訂正アドレスレジスタ140は、訂正アドレス書込み信号S107が‘１’であれば、データバスB102のデータを格納保持し、保持したデータを訂正アドレス信号S103として出力する。なお、訂正アドレスレジスタ140の初期値は、内蔵不揮発性メモリ120に該当しないアドレスの値とする。
【００３１】
訂正データレジスタ150は、訂正データ書込み信号S108が‘１’であれば、データバスＢ１０２のデータを格納保持し、保持したデータを訂正データ信号S104として出力する。
比較手段160は、アドレスバスB101のアドレスと訂正アドレス信号S103の値とを比較し、一致した場合には‘１’を、一致しない場合には‘０’を一致信号S105に出力する。
【００３２】
比較結果記憶手段170は、一致信号S105の値が‘１’であれば‘１’の値を格納保持し、リセット信号S109の値が‘１’であれば、‘０’の値を格納保持し、保持した値を一致状態保持信号S106に出力する。この比較結果記憶手段170の初期値は‘０’とする。
【００３３】
データ変換手段180は、一致信号S105が‘１’であれば、内蔵不揮発性メモリ120からＲＯＭバスB111に出力された読み出しデータを訂正データ信号S104の値に変換してデータバスB102に出力する。また、一致信号S105が‘０’で、かつ一致状態保持信号S106が‘１’であれば、内蔵不揮発性メモリ120からＲＯＭバスB111に出力された読み出しデータを無効化してデータバスB102に何も出力しない。更に、一致信号S105が‘０’で、かつ一致状態保持信号S106が‘０’であれば内蔵不揮発性メモリ120からＲＯＭバスB111に出力された読み出しデータをデータバスB102に乗せ換えて出力する。
【００３４】
プログラムおよびデータを格納した外部メモリ190は、リード信号S112が‘１’であれば、アドレスバスB101のアドレスで指定されるアドレスに格納されているプログラムおよびデータをデータバスB102に出力する。
【００３５】
ＣＰＵ110は、アドレスバスB101に内蔵揮発性メモリ120に該当するアドレスを出力すると共に、リード信号S112に‘１’を出力し、順次、内蔵不揮発性メモリ120に格納されているプログラムを、ＲＯＭバスB111とデータ変換手段180を介してデータバスB102から読み出し、解読した結果に従い各種制御を行う。なお、内蔵不揮発性メモリ120から読み出したプログラムが、内蔵揮発性メモリ130又は外部メモリ180への分岐命令である場合には、ＣＰＵ110は、アドレスバスB101に内蔵揮発性メモリ130又は外部メモリ180の該当するアドレスを出力すると共に、リード信号S112に‘１’を出力し、内蔵揮発性メモリ130又は外部メモリ180に格納されているプログラムを、データバスB102から読み出し、解読した結果に従い各種制御を行う。
【００３６】
ＣＰＵ110は、この他に下記の動作を実行できるように構成されている。
ＣＰＵ110は、ライト信号S113に‘１’、アドレスバスB101に内蔵揮発性メモリ130に該当するアドレスを各々出力すると共に、データバスB102にデータを出力し、内蔵揮発性メモリ130に任意の値を書き込むことができる。また、CPU110は、データバスB102にデータを出力すると共に訂正アドレス書込み信号S107に‘１’を出力し、訂正アドレスレジスタ140を任意の値に書き換えることができる。また、ＣＰＵ110は、データバスＢ102にデータを出力すると共に訂正データ書込み信号S108に‘１’を出力し、訂正データレジスタ150を任意の値に書き換えることができる。また、ＣＰＵ110は、リセット信号S109に‘１’を出力し、比較結果記憶手段170の値を‘０’にリセットすることができる。
【００３７】
次に、内蔵不揮発性メモリ120に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行う動作に基づいて、図１の構成を詳しく説明する。
先ず、プログラムスタート時のＣＰＵ110は、アドレスバスB101に内蔵不揮発性メモリ120に該当するアドレスを出力すると共に、リード信号S112に‘１’を出力し、内蔵不揮発性メモリ120に格納されているプログラムを読み出そうとする。
【００３８】
この時、訂正アドレスレジスタ140は、初期値として格納している内蔵不揮発性メモリ120に該当しないアドレスの値を、訂正アドレス信号S103に出力する。比較手段160は、アドレスバスB101に出力されている内蔵不揮発性メモリ120に該当するアドレスと、訂正アドレス信号103に出力されている内蔵不揮発性メモリ120に該当しないアドレスとを比較し、一致しないため一致信号S105に‘０’を出力する。比較結果記憶手段１７０は、一致信号S105の値が‘０’のため、一致状態保持信号S106に‘０’を出力し続ける。データ変換手段180は、一致信号S105が‘０’かつ一致状態保持信号S106が‘０’のため、内蔵不揮発性メモリ120からＲＯＭバスB111に出力された読み出しデータを、データバスB102に乗せ換えて出力する。
【００３９】
このように、ＣＰＵ110は、内蔵不揮発性メモリ120の該当アドレスに格納されているプログラムを、ＲＯＭバスB111およびデータ変換手段180を介してデータバスB102から順次読み出し、解読した結果に従い各種制御を行う。
【００４０】
次に、ＣＰＵ110は、内蔵不揮発性メモリ120が格納するプログラムの任意のアドレスから始まるプログラムを訂正するため、以下に示すプログラム（Ａ）（Ｂ）（Ｃ）を初期化プログラムとして実行する。
【００４１】
プログラム（Ａ）は、外部メモリ190から、内蔵不揮発性メモリ120に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ140に設定する。
【００４２】
プログラム（Ｂ）は、外部メモリ190から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、後述する、内蔵揮発性メモリ130に外部メモリ190から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
【００４３】
プログラム（Ｃ）は、外部メモリ190から、被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ130に転送する。
先ず、ＣＰＵ110がプログラム（Ａ）を読み出すと、ＣＰＵ110は、アドレスバスB101に、外部メモリ190に該当するアドレスを出力すると共に、リード信号S112に‘１’を出力し、外部メモリ190に予め格納された、被訂正プログラムの先頭アドレス値を読み出す。更にＣＰＵ110は、設定アドレス書込み信号S107に‘１’を出力するとともに、データバスB101に先ほど読み出した、被訂正プログラムの先頭アドレスを出力し、訂正アドレスレジスタ140に設定する。
【００４４】
次に、ＣＰＵ110がプログラム（Ｂ）を読み出すと、ＣＰＵ110は、アドレスバスB101に、外部メモリ190に該当するアドレスを出力すると共に、リード信号S112に‘１’を出力し、外部メモリ190に予め格納された、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出す。更にＣＰＵ110は、訂正データ書込み信号S108に‘１’を出力するとともに、データバスB101に先ほど読み出した、被訂正プログラムの先頭アドレスに格納されている命令コードを置換する命令コードを出力し、訂正データレジスタ150に設定する。
【００４５】
次に、ＣＰＵ110がプログラム（Ｃ）を読み出すと、ＣＰＵ１１０は、アドレスバスB101に、外部メモリ190に該当するアドレスを出力すると共に、リード信号S112に‘１’を出力し、外部メモリ190に予め格納された、代替プログラムを順次読み出す。更にＣＰＵ110は、ライト信号S113に‘１’を、アドレスバスB101に内蔵揮発性メモリ130に該当するアドレスを各々出力するとともに、データバスB102に先ほど読み出した代替プログラムを出力し、内蔵揮発性メモリ130に書き込む。
【００４６】
プログラム（Ｃ）を繰り返すことで、外部メモリ190から順次、代替プログラムを内蔵揮発性メモリ130に転送する。
以上のように、初期化プログラム（Ａ）（Ｂ）（Ｃ）でプログラム訂正の準備が完了した状態で、ＣＰＵ110が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【００４７】
ＣＰＵ110は、アドレスバスB101に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S112に‘１’を出力する。比較手段160はアドレスバスB101の値と、訂正アドレス信号S103の値がともに被訂正プログラムの先頭アドレスのため、一致信号S105にアドレスバスB101のアドレスと訂正アドレス信号S103の値とが一致したことを示す‘１’を出力する。比較結果記憶手段170は、一致信号S105の値‘１’を受けて‘１’の値を格納保持し、一致状態保持信号S106に‘１’を出力する。
【００４８】
データ変換手段180は、一致信号S105が‘１’であるため、訂正データ信号S104の値をデータバスB102に出力する。
次にＣＰＵ110はデータバスB102に出力された訂正データ信号の値が、予め内蔵揮発性メモリ130に外部メモリ190から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ130の該当アドレスへと変更し、アドレスバスB101に該当アドレスを出力すると共に、リード信号S112に‘１’を出力し順次、内蔵揮発性メモリ130の該当アドレスに格納されている代替プログラムをデータバスB102から読み出し、代替プログラム実行する。
【００４９】
更に、代替プログラムの実行を終えるときには、ＣＰＵ110は、リセット信号S109に‘１’を出力する。比較結果記憶手段170は、リセット信号S109の値‘１’を受けて、‘０’の値を格納保持し一致状態保持信号S106に‘０’を出力する。データ変換手段１８０は、一致信号S105が‘０’かつ一致状態保持信号S106が‘０’のため、内蔵不揮発性メモリ120からＲＯＭバスB111に出力された読み出しデータを、データバスB102に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ120からプログラムおよびデータを読み出すことが可能となる。
【００５０】
ここで、不正ユーザが外部メモリ190に格納されたプログラムを改変し、代替プログラムを、内蔵不揮発性メモリ120からデータおよびプログラムを読み出す記述にしたとする。
【００５１】
ＣＰＵ110が内蔵揮発性メモリ130から、改変された代替プログラムを読み出すと、ＣＰＵ110は、アドレスバスB101に、内蔵不揮発性メモリ120に該当するアドレスを出力すると共に、リード信号S112に‘１’を出力する。
【００５２】
内蔵不揮発性メモリ120は、リード信号S112が‘１’であるため、アドレスバスB101の値が示すアドレスに該当するデータをＲＯＭバスB111に出力する。
比較手段160はアドレスバスB101の値と、訂正アドレス信号S103の値が異なるため一致信号S105に‘０’を出力する。比較結果記憶手段170は、一致信号S105の値が‘０’であるため、状態を保持し一致状態保持信号S106に‘１’を出力し続ける。
データ変換手段180は、一致信号S105が‘０’で、かつ一致状態保持信号S106が‘１’であるため、内蔵不揮発性メモリ120からＲＯＭバスB111に出力されたプログラムおよびデータを、データバスB102に出力しない。これにより、内蔵不揮発性メモリ120の保護エリアに格納されたプログラムおよびデータは、データバスB102等から、マイクロコンピュータ100の外部へ出力されることはない。
【００５３】
以上のように、マイクロコンピュータを、内蔵不揮発性メモリ120と、内蔵揮発性メモリ130と、訂正アドレスレジスタ140と、訂正データ設定レジスタ150と、比較手段160と、比較結果記憶手段170と、データ変換手段180とで構成することで、内蔵不揮発性メモリ120のプログラムを訂正しつつ、不正ユーザが外部メモリ190を改変し、内蔵不揮発性メモリ120に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、内蔵不揮発性メモリ120に格納されたデータは読み出すことができずセキュリティが向上する。
【００５４】
なお、前記説明において、データ変換手段180は、データ無効化の方法として、内蔵不揮発性メモリ120から読み出したプログラムおよびデータをデータバスB102に何も出力しないとしたが、他に、リード信号S112に‘１’を出力しない、アドレスバスB101に該当アドレスを与えない、データバスB102に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラムおよびデータが読み出されない構成であれば良い。
【００５５】
（実施の形態２）
図２は本発明の（実施の形態２）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図２では、図１における内蔵不揮発性メモリ120に相当する内蔵不揮発性メモリ1020には複数個の記憶領域が形成されており、それに応じて図１におけるＣＰＵ110に相当するＣＰＵ1010の構成などが変更されている。
【００５６】
なお、図２では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ1000は、ＣＰＵ1010と、内部不揮発性メモリ1020と、内部揮発性メモリ1030と、訂正アドレスレジスタ1040と、訂正データレジスタ1050と、比較手段1060と、比較結果記憶手段1070と、データ変換手段1080と、２入力１出力のアンドゲート1100とによって構成されている。前記ＣＰＵ1010は内部に空間判定手段1110を備えている。1090は前記マイクロコンピュータ1000の外部に接続される外部メモリである
アドレスバスB1001は、ＣＰＵ1010と内蔵不揮発性メモリ1020と内蔵揮発性メモリ1030と比較手段1060とデータ変換手段1080と外部メモリ1090とを各々接続する。データバスB1002は、ＣＰＵ1010と内蔵揮発性メモリ1030と訂正アドレスレジスタ1040と訂正データレジスタ1050とデータ変換手段1080と外部メモリ1090とを各々接続する。
【００５７】
ＣＰＵ1010の出力の訂正アドレス書込み信号S1007は、訂正アドレスレジスタ1040に入力されている。訂正アドレスレジスタ1040の出力の訂正アドレス信号S1003は、比較手段1060の一方に入力されている。
【００５８】
ＣＰＵ1010の出力の訂正データ書込み信号S1008は、訂正データレジスタ1050に入力されている。訂正データレジスタ1050の出力の訂正データ信号S1004は、データ変換手段1080に入力されている。
【００５９】
比較手段1060の出力の一致信号S1005は、比較結果記憶手段1070とデータ変換手段1080に入力されている。比較結果記憶手段1070の出力の一致状態保持信号S1006は、データ変換手段1080に入力されている。ＣＰＵ1010から出力された原リセット信号S1014と内蔵不揮発性メモリ信号S1015とが入力に供給されたアンドゲート1100の出力に発生したリセット信号1009は、比較結果記憶手段1070に入力されている。リード信号S1012は、ＣＰＵ1010から出力されて内蔵不揮発性メモリ1020と内蔵揮発性メモリ1030および外部メモリ1090に入力されている。ライト信号S1013は、ＣＰＵ1010から出力されて内蔵揮発性メモリ1030に入力されている。内蔵不揮発性メモリ1020とデータ変換手段1080とは、ＲＯＭバスB1011で接続されている。
【００６０】
内蔵不揮発性メモリ1020はプログラムおよびデータを格納しており、リード信号S1012が‘１’であれば、アドレスバスB1001のアドレスで指定されるメモリ領域に格納されているプログラムおよびデータをＲＯＭバスB1011に出力する。
【００６１】
また、この内蔵不揮発性メモリ1020は、アドレスに応じてｎ個の領域に分割されている。ここでは、説明を簡単にするために、‘メモリ領域１’と‘メモリ領域２’との２つの領域に分割されているものとする。
【００６２】
データ変換手段1080は、一致信号S1005が‘１’であれば、内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力された読み出しデータを訂正データ信号S1004の値に変換してデータバスB1002に出力する。また、一致信号S1005が‘０’で、かつ一致状態保持信号S1006が‘１’で、かつアドレスバスB1001が内蔵不揮発性メモリ1020内のメモリ領域１に該当するアドレスであれば、内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力された読み出しデータを無効化し、データバスB1002に何も出力しない。また、一致信号S1005が‘０’で、かつ一致状態保持信号S1006が‘１’で、かつアドレスバスB1001が内蔵不揮発性メモリ1020内の‘メモリ領域２’に該当するアドレスであれば、内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力された読み出しデータをデータバスB1002に載せ換えて出力する。更に、一致信号S1005が‘０’で、かつ一致状態保持信号S1006が‘０’であれば内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力された読み出しデータを、データバスB1002に乗せ換えて出力する。
【００６３】
ＣＰＵ1010の空間判定手段1110は、ＣＰＵ1010が現在実行中のプログラムが、どのメモリ空間に格納されているかを判定し、内蔵不揮発性メモリ1020に格納されているプログラムを実行中の場合には、‘１’を、それ以外の場合には、‘０’を内蔵不揮発性メモリ信号S1015に出力する。また、ＣＰＵ1010は、原リセット信号S1014に‘１’を出力して、アンドゲート1110を介して比較結果記憶手段1070の値を‘０’にリセットすることができる。
【００６４】
アンドゲート1110は、ＣＰＵ1010が出力する原リセット信号S1014と空間判定手段1110が出力する不揮発性メモリ信号S1015との論理積をリセット信号S1009として出力する。すなわち、アンドゲート1110は、内蔵不揮発性メモリ信号S1015が‘１’で、かつ原リセット信号S1014が‘１’のときに、リセット信号に‘１’を出力し、比較結果記憶手段1070の値を‘０’にリセットする。
【００６５】
次に、内蔵不揮発性メモリ1020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ1000の動作に基づいて、図２の構成を詳しく説明する。
【００６６】
プログラムスタート時および以下に示すプログラム（Ａ）（Ｂ）（Ｃ）を初期化プログラムとして実行する動作については、（実施の形態１）と同一である。
プログラム（Ａ）は、外部メモリ1090から内蔵不揮発性メモリ1020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ1040に設定する。
【００６７】
プログラム（Ｂ）は、外部メモリ1090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、内蔵揮発性メモリ1030に外部メモリ1090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
【００６８】
プログラム（Ｃ）は、外部メモリ1090から被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ1030に転送する。
以上の初期化プログラム（Ａ）（Ｂ）（Ｃ）でプログラム訂正の準備が完了した状態で、ＣＰＵ1010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【００６９】
ＣＰＵ1010は、アドレスバスB1001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S1012に‘１’を出力する。比較手段1060はアドレスバスB1001の値と、訂正アドレス信号S1003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S1005にアドレスバスB1001のアドレスと訂正アドレス信号S1003の値とが一致したことを示す‘１’を出力する。比較結果記憶手段1070は、一致信号S1005の値‘１’を受けて‘１’の値を格納保持し、一致状態保持信号S1006に‘１’を出力する。
【００７０】
データ変換手段1080は、一致信号S1005が‘１’であるため、訂正データ信号S1004の値をデータバスB1002に出力する。
次にＣＰＵ1010はデータバスB1002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ1030に、外部メモリ1090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ1030の該当アドレスへと変更し、アドレスバスB1001に該当アドレスを出力すると共に、リード信号S1012に‘１’を出力し、内蔵揮発性メモリ1030の該当アドレスに格納されている代替プログラムを順次、データバスB1002から読み出し、代替プログラム実行する。
【００７１】
この代替プログラム実行中に、内蔵不揮発性メモリ1020に格納されているデータを参照する場合には、予め参照データを内蔵不揮発性メモリ1020内の‘メモリ領域２’に格納してくことで実現可能となる。以下にこのときの動作を説明する。
【００７２】
ＣＰＵ1010は、アドレスバスB1001に内蔵不揮発性メモリ1020内の‘メモリ領域２’に該当するアドレスを出力するとともに、リード信号S1012に‘１’を出力する。この時、アドレスバスB1001に出力されるアドレスは、訂正アドレスレジスタ1040に設定されているアドレスとは異なるものとする。内蔵不揮発性メモリ1020は、リード信号S1012が‘１’のため、アドレスバスB1001のアドレスに該当するデータをＲＯＭバスB1011に出力する。比較手段1060は、アドレスバスB1001のアドレスと訂正アドレス信号S1003の値を比較し、値が異なるため一致信号S1005に‘０’を出力する。比較結果記憶手段1070は、代替プログラム実行時にセットされた‘１’の値を保持し、一致状態保持信号S1006に‘１’を出力し続けている。データ変換手段1080は、一致信号S1005が‘０’で、かつ一致状態保持信号S1006が‘１’で、かつアドレスバスB1001のアドレスが‘メモリ領域２’に該当するため、内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力された読み出しデータを、データバスB1002に乗せ換えて出力する。
【００７３】
このように、‘メモリ領域２’にデータおよびプログラムを予め格納しておくことで、代替プログラムを実行中でも内蔵不揮発性メモリ1020からデータおよびプログラムを読み出し可能となる。
【００７４】
更に、代替プログラムの実行を終えるときには、ＣＰＵ1010は、リセット原信号S1014に‘１’を出力する。このときＣＰＵ1010が原リセット信号S1014に‘１’を出力する処理を実行するためのプログラムは、内蔵不揮発性メモリ1020の‘メモリ領域２’に格納してあるものとする。
【００７５】
‘メモリ領域２’に格納してあるプログラムの実行は、上記と同様にＣＰＵ1010が順次、内蔵不揮発性メモリ1020の該当アドレスに格納されているプログラムを、ＲＯＭバスB1011およびデータ変換手段1080を介してデータバスB1002から読み出すことで実現できる。空間判定手段1110は、‘メモリ領域２’に格納されている、原リセット信号S1014に‘１’を出力する処理を実行するためのプログラムを実行中のため、内蔵揮発性メモリ信号S1015に‘１’を出力する。アンドゲート1100は、原リセット信号S1014の値‘１’と内蔵不揮発性メモリ信号S1015の値‘１’との論理積‘１’をリセット信号S1009として出力する。比較結果記憶手段1070は、リセット信号S1009の値‘１’を受けて、‘０’の値を格納保持し一致状態保持信号S1006に‘０’を出力する。データ変換手段1080は、一致信号S1005が‘０’かつ一致状態保持信号S1006が‘０’のため、内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力された読み出しデータを、データバスB1002に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ1020からプログラムおよびデータを読み出すことが可能となる。
【００７６】
ここで、不正ユーザが外部メモリ1090に格納されたプログラムを改変し、代替プログラムを、内蔵不揮発性メモリ1020からデータおよびプログラムを読み出す記述にしたと仮定する。
【００７７】
ＣＰＵ1010が内蔵揮発性メモリ1030から、改変された代替プログラムを読み出すと、ＣＰＵ1010はアドレスバスB1001に、内蔵不揮発性メモリ1020に該当するアドレスを出力すると共に、リード信号S1012に‘１’を出力する。
【００７８】
内蔵不揮発性メモリ1020は、リード信号S1012が‘１’であるため、アドレスバスB1001の値が示すアドレスに該当するデータをＲＯＭバスB1011に出力する。
比較手段1060はアドレスバスB1001の値と、訂正アドレス信号S1003の値が異なるため一致信号S1005に‘０’を出力する。比較結果記憶手段1070は、一致信号S1005の値が‘０’であるため、状態を保持し一致状態保持信号S1006に‘１’を出力し続ける。
【００７９】
データ変換手段1080は、一致信号S1005が‘０’で、かつ一致状態保持信号S1006が‘１’であるため、アドレスバスB1001のアドレスが‘メモリ領域１’に該当するアドレスか、‘メモリ領域２’に該当するアドレスかによって動作が異なる。‘メモリ領域２’に該当するアドレスの場合には、内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力されたプログラムおよびデータを、データバスB1002に載せ換えて出力するため、‘メモリ領域２’に格納されたデータおよびプログラムは読み出されてしまう。しかしながら、‘メモリ領域１’に該当するアドレスの場合には、内蔵不揮発性メモリ1020からＲＯＭバスB1011に出力されたプログラムおよびデータを、データバスB1002に出力しないため、内蔵不揮発性メモリ1020の記憶領域１に格納されたプログラムおよびデータは、データバスB1002等から、マイクロコンピュータ1000の外部へ出力されることはない。
【００８０】
次に、不正ユーザが外部メモリ1090に格納されたプログラムを改変し、代替プログラムを、ＣＰＵ1010が原リセット信号S1014に‘１’を出力する記述にしたと仮定する。
ＣＰＵ1010は、原リセット信号S1014に‘１’を出力する。空間判定手段1110は、内蔵不揮発性メモリ1030に転送された代替プログラム内にある、原リセット信号S1014に‘１’を出力する処理を実行中のため、内蔵揮発性メモリ信号S1015に‘０’を出力する。アンドゲート1100は、原リセット信号S1014の値‘１’と内蔵不揮発性メモリ信号S1015の値‘０’との論理積‘０’をリセット信号S1009として出力する。
【００８１】
比較結果記憶手段1070は、リセット信号S1009の値が‘０’のため、代替プログラムを実行するときに格納保持された‘１’の値を保持し続け、一致状態保持信号S1006に‘１’を出力し続ける。データ変換手段1080は、一致信号S1005が‘０’かつ一致状態保持信号S1006が‘１’のため、上記と同様に、‘メモリ領域２’に格納したデータは読み出し可能だが、‘メモリ領域１’に格納したデータは読み出し不可能のままである。
【００８２】
このように、マイクロコンピュータ1000を、内蔵不揮発性メモリ1020と、複数のメモリ領域から構成される内蔵揮発性メモリ1030と、訂正アドレスレジスタ1040と、訂正データレジスタ1050と、比較手段1060と、比較結果記憶手段1070と、データ変換手段1080とで構成することで、内蔵不揮発性メモリ1020のプログラムを訂正しつつ、不正ユーザが外部メモリ1090を改変して内蔵不揮発性メモリ1020に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、内蔵不揮発性メモリ1020に格納されたデータは読み出すことができない一方で、‘メモリ領域２’に格納されたデータについては、代替プログラム実行中にもデータの参照が可能となる。さらに、比較結果記憶手段1070のリセットを内蔵不揮発性メモリ1020内に格納されたプログラムからしか実行できないことで、代替プログラムから読み出しの解除が行えないためセキュリティが向上する。
【００８３】
前記の説明においてデータ変換手段1080は、データ無効化の方法として、内蔵不揮発性メモリ1020から読み出したプログラムおよびデータをデータバスB1002に何も出力しないとしたが、他にリード信号S1012に‘１’を出力しない、アドレスバスB1001に該当アドレスを与えない、データバスB1002に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラムおよびデータが読み出されない構成であれば良い。
【００８４】
前記の説明において、内蔵不揮発性メモリ1020は、２つのメモリ領域から構成されているとしたが、内蔵不揮発性メモリ1020はｎ個（ｎは２以上の整数）のメモリ領域で構成し、各領域毎に代替プログラム中の読み出しが可能か否かを設定できる構成であっても良い。
【００８５】
（実施の形態３）
図３は本発明の（実施の形態３）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図３では、図１におけるＣＰＵ110に相当するＣＰＵ2010に、ＣＰＵ2010のアクセスがオペランドフェッチであるか否かを判定すフェッチ判定手段2110を備え、図１における比較結果記憶手段170に相当する比較結果記憶手段2070の入力回路などが変更されている。
【００８６】
なお、図３では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
マイクロコンピュータ2000は、ＣＰＵ2010と、内部不揮発性メモリ2020と、内部揮発性メモリ2030と、訂正アドレスレジスタ2040と、訂正データレジスタ2050と、比較手段2060と、比較結果記憶手段2070と、データ変換手段2080と、２入力１出力のアンドゲート2100とによって構成されている。また、前記ＣＰＵ2010は内部にフェッチ判定手段2110を備えている。2090は前記マイクロコンピュータ2000の外部に接続される外部メモリである。
【００８７】
アドレスバスB2001は、ＣＰＵ2010と内蔵不揮発性メモリ2020と内蔵揮発性メモリ2030と比較手段2060と外部メモリ2090とを各々接続する。データバスB2002は、ＣＰＵ2010と内蔵揮発性メモリ2030と訂正アドレスレジスタ2040と訂正データレジスタ2050とデータ変換手段2080と外部メモリ2090とを各々接続する。
【００８８】
ＣＰＵ2010の出力の訂正アドレス書込み信号S2007は、訂正アドレスレジスタ2040に入力されている。訂正アドレスレジスタ2040の出力の訂正アドレス信号S2003は、比較手段2060の一方に入力されている。
【００８９】
ＣＰＵ2010の出力の訂正データ書込み信号S2008は、訂正データ設定レジスタ2050に接続されている。 訂正データレジスタ2050の出力の訂正データ信号S2004は、データ変換手段2080に入力されている。
【００９０】
比較手段2060の出力の一致信号S2005は、データ変換手段2080とアンドゲート2100に入力されている。アンドゲート2100のもう一方の入力にはフェッチ判定手段2110から出力されたオペコードフェッチ信号S2015が入力されており、アンドゲート2100の出力のセット信号S2014は比較結果記憶手段2070に入力されている。比較結果記憶手段2070にはＣＰＵ2010からリセット信号2009が入力されている。比較結果記憶手段2070の出力の一致状態保持信号S2006は、データ変換手段2080に入力されている。内蔵不揮発性メモリ2020とデータ変換手段2080はＲＯＭバスB2011で接続されている。
【００９１】
ＣＰＵ2010が出力するリード信号S2012は、内蔵不揮発性メモリ2020と内蔵揮発性メモリ2030と外部メモリ2090に入力されている。ＣＰＵ2010が出力するライト信号S2013は、内蔵揮発性メモリ2030に入力されている。
【００９２】
比較結果記憶手段2070は、セット信号S2014の値が‘１’であれば、‘１’の値を格納保持し、リセット信号S2009の値が‘１’であれば、‘０’の値を格納保持し、保持した値を一致状態保持信号S2006に出力する。また、比較結果記憶手段の初期値は‘０’とする。
【００９３】
フェッチ判定手段2110は、ＣＰＵ2010が実行中のアクセスがオペランドフェッチかオペコードフェッチかを判定し、オペランドフェッチの場合には‘０’を、オペコードフェッチの場合には‘１’をオペコードフェッチ信号S2015に出力する。
【００９４】
アンドゲート2110は、フェッチ判定手段2110が出力するオペコードフェッチ信号S1015と比較手段2060が出力する一致信号S2005との論理積をセット信号S2014として出力する。すなわち、アンドゲート2110は、オペコードフェッチ信号が‘０’のときにはセット信号に‘０’を出力し、比較結果記憶手段2070の値を‘１’にセットすることを回避する。
【００９５】
次に、内蔵不揮発性メモリ2020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータの動作に基づいて、図３の構成を詳しく説明する。なお、プログラムスタート時および、以下に示すプログラムを初期化プログラムとして実行する動作については、（実施の形態１）と同一であるので説明を省略する。
【００９６】
ここでは、下記の（Ａ）（Ｂ）（Ｃ）の初期化プログラムでプログラム訂正の準備が完了した状態で、ＣＰＵ2010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【００９７】
プログラム（Ａ）は、外部メモリ2090から内蔵不揮発性メモリ2020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ2040に設定する。
【００９８】
プログラム（Ｂ）は、外部メモリ2090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタ2050に設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ2030に外部メモリ2090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
【００９９】
プログラム（Ｃ）は、外部メモリ2090から被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ2030に転送する。
ＣＰＵ2010は、アドレスバスB2001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S2012に‘１’を出力する。比較手段2060は、アドレスバスB2001の値と訂正アドレス信号S2003の値が、ともに被訂正プログラムの先頭アドレスのため、一致信号S2005にアドレスバスB2001のアドレスと訂正アドレス信号S2003の値とが一致したことを示す‘１’を出力する。フェッチ判定手段2110は、ＣＰＵ2010が実行中のアクセスがオペコードフェッチのため、オペコードフェッチ信号S2015に‘１’を出力する。アンドゲート2100は、一致信号S2005の値‘１’とオペコードフェッチ信号S2015の値‘１’の論理積‘１’をセット信号S2014として出力する。比較結果記憶手段2070は、セット信号S2014の値‘１’を受けて‘１’の値を格納保持し、一致状態保持信号S2006に‘１’を出力する。データ変換手段2080は、一致信号S2005が‘１’であるため、訂正データ信号S2004の値をデータバスB2002に出力する。
【０１００】
次にＣＰＵ2010は、データバスB2002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ2030に外部メモリ2090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ2030の該当アドレスへと変更し、アドレスバスB2001に該当アドレスを出力すると共に、リード信号S2012に‘１’を出力し、内蔵揮発性メモリ2030の該当アドレスに格納されている代替プログラムをデータバスB2002から順次読み出し、代替プログラム実行する。
【０１０１】
以上は、前記プログラム（Ｂ）で、置換する命令コードが内蔵揮発性メモリ2030に外部メモリ2090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である場合についての動作であるが、置換する命令コードがテーブルデータなどのオペランドフェッチとしてアクセスする場合もある。以下にオペランドフェッチデータを置換する場合の動作を説明する。
【０１０２】
この場合のＣＰＵ2010は、アドレスバスB2001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S2012に‘１’を出力する。比較手段2060はアドレスバスB2001の値と、訂正アドレス信号S2003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S2005にアドレスバスB2001のアドレスと訂正アドレス信号S2003の値とが一致したことを示す‘１’を出力する。フェッチ判定手段2110は、ＣＰＵ2010が実行中のアクセスがオペランドフェッチのため、オペコードフェッチ信号S2015に‘０’を出力する。アンドゲート2100は、一致信号S2005の値‘１’とオペコードフェッチ信号S2015の値‘０’の論理積‘０’をセット信号S2014として出力する。比較結果記憶手段2070は、セット信号S2014の値‘０’を受けて、一致状態保持信号S2006に‘０’を出力し続ける。データ変換手段2080は、一致信号S2005が‘１’であるため、訂正データ信号S2004の値をデータバスB2002に出力する。
【０１０３】
このように、一致状態保持信号S2006が‘１’にセットされないため、ＣＰＵ2010が引き続きプログラムを実行する場合でも、内蔵不揮発性メモリ2020に格納されたデータの読み出しが保護されることはないが、オペランドフェッチデータを訂正する場合には、前記プログラム（Ｃ）にある、内蔵揮発性メモリ2030に代替プログラムを転送することもないため、不正ユーザにプログラムを改変されることもないため、セキュリティが損なわれることはない。逆に、オペランドフェッチデータを訂正する場合、比較結果記憶手段2070をリセットして、セキュリティを解除する手間を省くことができる。
【０１０４】
（実施の形態４）
図４は本発明の（実施の形態４）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図４では、図１におけるＣＰＵ110に相当するＣＰＵ3010は、図１におけるデータ変換手段180に相当するデータ変換手段3080を介して読み出したデータが、サブルーチン分岐命令であるか否かを解読する解読手段3110を備え、図１における比較結果記憶手段170に相当する比較結果記憶手段3070の入力回路などが変更されている。なお、図４では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
【０１０５】
マイクロコンピュータ3000は、ＣＰＵ3010と内部不揮発性メモリ3020と内部揮発性メモリ3030と訂正アドレスレジスタ3040と訂正データレジスタ3050と比較手段3060と比較結果記憶手段3070とデータ変換手段3080および２入力１出力のアンドゲート3100とによって構成されている。また、ＣＰＵ3010は内部に解読手段3110を備えている。3090はマイクロコンピュータ3000の外部に接続される外部メモリである。
【０１０６】
アドレスバスB3001は、ＣＰＵ3010と内蔵不揮発性メモリ3020と内蔵揮発性メモリ3030と比較手段3060と外部メモリ3090とを各々接続する。データバスB3002は、ＣＰＵ3010と内蔵揮発性メモリ3030と訂正アドレスレジスタ3040と訂正データレジスタ3050とデータ変換手段3080と外部メモリ3090とを各々接続する。
【０１０７】
ＣＰＵ3010の出力の訂正アドレス書込み信号S3007は、訂正アドレスレジスタ3040に入力されている。訂正アドレスレジスタ3040の出力の訂正アドレス信号S3003は、比較手段3060の一方に入力されている。
【０１０８】
ＣＰＵ3010の出力の訂正データ書込み信号S3008は、訂正データ設定レジスタ3050に入力されている。訂正データレジスタ3050の出力の訂正データ信号S3004は、データ変換手段3080に入力されている。
【０１０９】
比較手段3060の出力の一致信号S3005は、データ変換手段3080とアンドゲート3100の一方の入力とに入力されている。ＣＰＵ3010の出力するサブルーチン分岐信号S3015は、アンドゲート3100のもう一方の入力に入力されている。アンドゲート3100の出力のセット信号S3014は、比較結果記憶手段3070に入力されている。ＣＰＵ3010の出力のリセット信号3009は、比較結果記憶手段3070に入力されている。比較結果記憶手段3070の出力の一致状態保持信号S3006は、データ変換手段3080に入力されている。
【０１１０】
内蔵不揮発性メモリ3020とデータ変換手段3080とは、ＲＯＭバスB3011によって接続されている。
ＣＰＵ3010の出力するリード信号S3012は、内蔵不揮発性メモリ3020と内蔵揮発性メモリ3030および外部メモリ3090に入力されている。ＣＰＵ3010の出力するライト信号S3013は、内蔵揮発性メモリ3030に入力されている。
【０１１１】
比較結果記憶手段3070は、セット信号S3014の値が‘１’であれば、‘１’の値を格納保持し、リセット信号S3009の値が‘１’であれば、‘０’の値を格納保持し、保持した値を一致状態保持信号S3006に出力する。また、比較結果記憶手段3070の初期値は‘０’とする。
【０１１２】
ＣＰＵ3010の解読手段2110は、ＣＰＵ3010がデータバスB3002から読み込んだ命令コードを解読し、命令コードがサブルーチン分岐命令か否かを判定し、サブルーチン分岐命令の場合には‘１’を、それ以外の場合には‘０’をサブルーチン分岐信号S3015に出力する。
【０１１３】
前記アンドゲート3110は、解読手段3110が出力するサブルーチン分岐信号S3015と比較手段3060が出力する一致信号S3005との論理積をセット信号S3014として出力する。すなわち、アンドゲート3110は、サブルーチン分岐信号が‘０’のときにはセット信号に‘０’を出力し、比較結果記憶手段3070の値を‘１’にセットすることを回避する。
【０１１４】
次に、内蔵不揮発性メモリ3020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ2000の動作に基づいて説明する。なお、プログラムスタート時および、以下に示すプログラム（Ａ）（Ｂ）（Ｃ）を初期化プログラムとして実行する動作については、（実施の形態１）と同一である。
【０１１５】
プログラム（Ａ）は、外部メモリ3090から内蔵不揮発性メモリ3020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ2040に設定する。
【０１１６】
プログラム（Ｂ）は、外部メモリ3090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ3030に外部メモリ3090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
【０１１７】
プログラム（Ｃ）は、外部メモリ3090から被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ3030に転送する。
以上の（Ａ）（Ｂ）（Ｃ）の初期化プログラムでプログラム訂正の準備が完了した状態で、ＣＰＵ3010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【０１１８】
ＣＰＵ3010は、アドレスバスB3001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S3012に‘１’を出力する。比較手段3060はアドレスバスB3001の値と、訂正アドレス信号S3003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S3005にアドレスバスB3001のアドレスと訂正アドレス信号S3003の値とが一致したことを示す‘１’を出力する。
【０１１９】
データ変換手段3080は、一致信号S3005が‘１’であるため、訂正データ信号S3004の値をデータバスB3002に出力する。
次にＣＰＵ3010は、データバスB3002を介して訂正データレジスタ3050に格納されている、予め内蔵揮発性メモリ3030に外部メモリ3090から転送された代替プログラムの先頭にサブルーチン分岐する命令コードを読み込む。
【０１２０】
解読手段3110は、ＣＰＵ3010がデータバスB3002から読み込んだ命令コードを解読し、命令コードがサブルーチン分岐命令のため、サブルーチン分岐信号S3015に‘１’を出力する。アンドゲート3100は、一致信号S2005の値‘１’とサブルーチン分岐信号S3015の値‘１’の論理積‘１’をセット信号S3014として出力する。比較結果記憶手段3070は、セット信号S3014の値‘１’を受けて‘１’の値を格納保持し、一致状態保持信号S3006に‘１’を出力する。
【０１２１】
次にＣＰＵ3010は、データバスB3002を介して読み込んだ命令コードが、予め内蔵揮発性メモリ3030に外部メモリ3090から転送された代替プログラムの先頭にサブルーチン分岐する命令コードであるため、プログラムの読み出し先を内蔵揮発性メモリ3030の該当アドレスへと変更し、アドレスバスB3001に該当アドレスを出力すると共に、リード信号S3012に‘１’を出力し順次、内蔵揮発性メモリ3030の該当アドレスに格納されている代替プログラムをデータバスＢ3002から読み出し、代替プログラム実行する。
【０１２２】
以上は、前記プログラム（Ｂ）で、置換する命令コードが内蔵揮発性メモリ3030に外部メモリ2090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である場合についての動作であるが、置換する命令コードがテーブルデータなどのオペランドフェッチとしてアクセスする場合もある。以下にオペランドフェッチデータを置換する場合の動作を説明する。
【０１２３】
ＣＰＵ3010は、アドレスバスB3001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S3012に‘１’を出力する。比較手段3060はアドレスバスB3001の値と、訂正アドレス信号S3003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S3005にアドレスバスB3001のアドレスと訂正アドレス信号S3003の値とが一致したことを示す‘１’を出力する。
【０１２４】
データ変換手段3080は、一致信号S3005が‘１’であるため、訂正データ信号S3004の値をデータバスB3002に出力する。
次にＣＰＵ3010は、データバスB3002を介して訂正データレジスタ3050に格納されている、テーブルデータを読み込む。
【０１２５】
解読手段3110は、ＣＰＵ3010がデータバスB3002から読み込んだ命令コードを解読し、命令コードがテーブルデータのため、サブルーチン分岐信号S3015に‘０’を出力する。アンドゲート3100は、一致信号S3005の値‘１’とサブルーチン分岐信号S3015の値‘０’の論理積‘０’をセット信号S3014として出力する。比較結果記憶手段3070は、セット信号S3014の値‘０’を受けて、一致状態保持信号S3006に‘０’を出力し続ける。
【０１２６】
このように、一致状態保持信号S3006が‘１’にセットされないため、ＣＰＵ3010が引き続きプログラムを実行する場合でも、内蔵不揮発性メモリ3020に格納されたデータの読み出しが保護されることはないが、オペランドフェッチデータを訂正する場合には、前記プログラム（Ｃ）にある、内蔵揮発性メモリ3030に代替プログラムを転送することもないため、不正ユーザにプログラムを改変されず、セキュリティが損なわれることはない。逆に、オペランドフェッチデータを訂正する場合、比較結果記憶手段3070をリセットしてセキュリティを解除する手間を省くことができる。
【０１２７】
（実施の形態５）
図５は本発明の（実施の形態５）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図５では、図１におけるＣＰＵ110に相当するＣＰＵ4010は、実行しているプログラムが図１における内蔵不揮発性メモリ120に相当する不揮発性メモリ4020に格納されたプログラムであるか否かを判定する空間判定手段4110と、ＣＰＵ4010のアクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段4120とを備え、図１におけるデータ変換手段180に相当するデータ変換手段4080の入力回路などが変更されている。なお、図５では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
【０１２８】
マイクロコンピュータ4000は、ＣＰＵ4010と内部不揮発性メモリ4020と内部揮発性メモリ4030と訂正アドレスレジスタ4040と訂正データレジスタ4050と比較手段4060と比較結果記憶手段4070とデータ変換手段4080および３入力１出力のアンドゲート4100とによって構成されている。また、ＣＰＵ4010は内部に空間判定手段4110とフェッチ判定手段4120を備えている。4090はマイクロコンピュータ4000の外部に接続される外部メモリである。
【０１２９】
アドレスバスB4001は、ＣＰＵ4010と内蔵不揮発性メモリ4020と内蔵揮発性メモリ4030と比較手段4060と外部メモリ4090とを各々接続する。データバスB4002は、ＣＰＵ4010と内蔵揮発性メモリ4030と訂正アドレスレジスタ4040と訂正データレジスタ4050とデータ変換手段4080と外部メモリ4090とを各々接続する。
【０１３０】
ＣＰＵ4010の出力する訂正アドレス書込み信号S4007は、訂正アドレスレジスタ4040に入力されている。訂正アドレスレジスタ4040の出力の訂正アドレス信号S4003は、比較手段4060のもう一方の入力に入力されている。ＣＰＵ4010の出力する訂正データ書込み信号S4008は、訂正データ設定レジスタ4050に入力されている。訂正データレジスタ4050の出力の訂正データ信号S4004は、データ変換手段4080に入力されている。
【０１３１】
比較手段4060の出力の一致信号S4005は、比較結果記憶手段4070とデータ変換手段4080とに入力されている。ＣＰＵ4010の出力するリセット信号4009は、比較結果記憶手段4070に入力されている。比較結果記憶手段2070の出力の一致状態保持信号S4006は、アンドゲート4100に入力されている。アンドゲート4100の入力にはこの他に、空間判定手段4110の出力する内蔵揮発性メモリ信号S4015と、フェッチ判定手段4120の出力するオペランドフェッチ信号S4016とが入力されている。 アンドゲート4100の出力の無効化信号S4014は、データ変換手段4080に有力されている。
【０１３２】
内蔵不揮発性メモリ4020とデータ変換手段4080とはＲＯＭバスB4011で接続されている。ＣＰＵ4010の出力するリード信号S4012は、内蔵不揮発性メモリ4020と内蔵揮発性メモリ4030と外部メモリ4090に入力されている。ＣＰＵ4010の出力するライト信号S4013は、内蔵揮発性メモリ4030に入力されている。
【０１３３】
データ変換手段4080は、一致信号S4005が‘１’であれば、内蔵不揮発性メモリ4020からＲＯＭバスB4011に出力された読み出しデータを訂正データ信号S4004の値に変換してデータバスB4002に出力する。また、一致信号S4005が‘０’かつ、無効化信号S4014が‘１’であれば、内蔵不揮発性メモリ4020からＲＯＭバスB4011に出力された読み出しデータを無効化し、データバスB4002に何も出力しない。また、一致信号S4005が‘０’で、かつ無効化信号S4014が‘０’であれば内蔵不揮発性メモリ4020からＲＯＭバスB4011に出力された読み出しデータを、データバスB4002に乗せ換えて出力する。
【０１３４】
空間判定手段4110は、ＣＰＵ4010が実行中のプログラムが、どのメモリ空間に格納されているかを判定し、内蔵揮発性メモリ4030に格納されているプログラムを実行中の場合には、‘１’を、それ以外の場合には、‘０’を内蔵揮発性メモリ信号S4015に出力する。
【０１３５】
フェッチ判定手段4120は、ＣＰＵ4010が実行中のアクセスがオペランドフェッチかオペコードフェッチかを判定し、オペランドフェッチの場合には‘１’を、オペコードフェッチの場合には‘０’をオペランドフェッチ信号S4015に出力する。
【０１３６】
次に、内蔵不揮発性メモリ4020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ3000の動作に基づいて説明する。なお、プログラムスタート時および、以下に示すプログラム（Ａ）（Ｂ）（Ｃ）を初期化プログラムとして実行する動作については、（実施の形態１）と同一である。
【０１３７】
プログラム（Ａ）は、外部メモリ4090から内蔵不揮発性メモリ4020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ3040に設定する。
【０１３８】
プログラム（Ｂ）は、外部メモリ4090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ4030に外部メモリ4090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
【０１３９】
プログラム（Ｃ）は、外部メモリ4090から被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ4030に転送する。
以上の（Ａ）（Ｂ）（Ｃ）の初期化プログラムでプログラム訂正の準備が完了した状態で、ＣＰＵ4010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【０１４０】
ＣＰＵ4010は、アドレスバスB4001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S4012に‘１’を出力する。比較手段4060はアドレスバスB4001の値と、訂正アドレス信号S4003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S4005にアドレスバスB4001のアドレスと訂正アドレス信号S4003の値とが一致したことを示す‘１’を出力する。
【０１４１】
データ変換手段4080は、一致信号S4005が‘１’であるため、訂正データ信号S4004の値をデータバスB2002に出力する。
次にＣＰＵ4010はデータバスB4002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ4030に外部メモリ4090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ4030の該当アドレスへと変更し、アドレスバスB4001に該当アドレスを出力すると共に、リード信号S4012に‘１’を出力し順次、内蔵揮発性メモリ4030の該当アドレスに格納されている代替プログラムをデータバスB4002から読み出し、代替プログラム実行する。
【０１４２】
ここで、不正ユーザが外部メモリ4090に格納されたプログラムを改変し、代替プログラムを、内蔵不揮発性メモリ4020からデータおよびプログラムを読み出す記述にしたとする。
【０１４３】
ＣＰＵ4010が内蔵揮発性メモリ4030から、改変された代替プログラムを読み出すと、ＣＰＵ4010は、アドレスバスB4001に、内蔵不揮発性メモリ4020に該当するアドレスを出力すると共に、リード信号S4012に‘１’を出力する。
【０１４４】
内蔵不揮発性メモリ4020は、リード信号S4012が‘１’であるため、アドレスバスB4001の値が示すアドレスに該当するデータをＲＯＭバスB4011に出力する。
比較手段4060は、アドレスバスB4001の値と訂正アドレス信号S4003の値が異なるため一致信号S4005に‘０’を出力する。比較結果記憶手段4070は、一致信号S4005の値が‘０’であるため、状態を保持し一致状態保持信号S4006に‘１’を出力し続ける。
【０１４５】
空間判定手段4110は、ＣＰＵ4010が内蔵揮発性メモリ4030に格納されている代替プログラムを実行中のため、内蔵揮発性メモリ信号S4015に‘１’を出力する。
フェッチ判定手段4120は、ＣＰＵ4010が内蔵不揮発性メモリ4030に対して行おうとしているアクセスは、データ読み出しを行うオペランドフェッチであるため、オペランドフェッチ信号S4016に‘１’を出力する。アンドゲート4100は、一致状態保持信号S4006の値‘１’と内蔵揮発性メモリ信号S4015の値‘１’とオペランドフェッチ信号S4016の値‘１’の論理積‘１’を無効化信号S4014として出力する。
【０１４６】
データ変換手段4080は、一致信号S4005が‘０’で、かつ無効化信号S4014が‘１’であるため、内蔵不揮発性メモリ4020からＲＯＭバスB4011に出力されたプログラムおよびデータを、データバスB4002に出力しない。これにより、内蔵不揮発性メモリ4020に格納されたプログラムおよびデータは、データバスB4002等から、マイクロコンピュータ4000の外部へ出力されることはない。
【０１４７】
以上は、前記プログラム（Ｃ）で、内蔵揮発性メモリ4030に転送しておく代替プログラムが内蔵揮発性メモリ4030の空間から分岐することがないことを前提としているが、以下に代替プログラムが内蔵不揮発性メモリ4020に格納されたサブルーチンを実行するときの動作を説明する。
【０１４８】
ＣＰＵ4010が、内蔵揮発性メモリ4030に格納された代替プログラム中の、内蔵不揮発性メモリ4020へサブルーチン分岐する命令コードを読み込むと、プログラムの読み出し先を内蔵不揮発性メモリ4020の該当アドレスへと変更し、アドレスバスB4001に該当アドレスを出力すると共に、リード信号S4012に‘１’を出力する。空間判定手段4110は、ＣＰＵ4010が内蔵揮発性メモリ4030に格納されている代替プログラム中の内蔵不揮発性メモリ4020へサブルーチン分岐する命令コードを実行中のため、内蔵揮発性メモリ信号S4015に‘１’を出力する。フェッチ判定手段4120は、ＣＰＵ4010が内蔵不揮発性メモリ4030に対して行おうとしているアクセスは、命令読み出しを行うオペコードフェッチであるため、オペランドフェッチ信号S4016に‘０’を出力する。アンドゲート4100は、一致状態保持信号S4006の値‘１’と内蔵揮発性メモリ信号S4015の値‘１’とオペランドフェッチ信号S4016の値‘０’の論理積‘１’を無効化信号S4014として出力する。
【０１４９】
データ変換手段4080は、一致信号S4005が‘０’で、かつ無効化信号S4014が‘０’であるため、内蔵不揮発性メモリ4020からＲＯＭバスB4011に出力されたデータをデータバスB4002に載せ換えて出力する。
【０１５０】
次にＣＰＵ4010は、データバスB4002を介して読み出した、内蔵不揮発性メモリ4030の該当アドレスに格納されているプログラムを解読した結果に従い各種制御を行う。以降、ＣＰＵ4010は、内蔵不揮発性メモリ4030に格納されているプログラムを順次実行するため、空間判定手段4120は内蔵揮発性メモリ信号S4015に‘０’を出力する。アンドゲート4100は内蔵揮発性メモリ信号S4015の値が‘０’であるため、一致状態保持信号S4006および、オペランドフェッチ信号S4016の値に依らず、無効化信号S4014に‘０’を出力する。
【０１５１】
このように、内蔵不揮発性メモリ4020へのサブルーチン分岐時には、内蔵揮発性メモリ空間4030で実行する命令であるが、命令読み出しを行うオペコードフェッチのため、内蔵不揮発性メモリ4020に格納された、サブルーチン分岐先のアドレスに該当する命令コードを読み出すことが可能となる。さらに内蔵不揮発性メモリ4020にサブルーチン分岐した後は、内蔵不揮発性メモリ4030に格納されたプログラムを実行することになるため、代替プログラム中で内蔵不揮発性メモリ4020へのサブルーチン分岐が可能となる。
【０１５２】
（実施の形態６）
図６は本発明の（実施の形態６）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図６では、図１におけるＣＰＵ110に相当するＣＰＵ5010は、データ変換手段180に相当するデータ変換手段5080を介して読み出したデータがサブルーチン復帰命令であるか否かを解読する解読手段5110を備えている。なお、図６では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
【０１５３】
マイクロコンピュータ5000は、ＣＰＵ5010と内部不揮発性メモリ5020と内部揮発性メモリ5030と訂正アドレスレジスタ5040と訂正データレジスタ5050と比較手段5060と比較結果記憶手段5070およびデータ変換手段5080とによって構成されている。また、前記ＣＰＵ5010は、内部に解読手段5110を備えている。5090はマイクロコンピュータ5000の外部に接続される外部メモリである。
【０１５４】
アドレスバスB5001は、ＣＰＵ5010と内蔵不揮発性メモリ5020と内蔵揮発性メモリ5030と比較手段5060と外部メモリ5090とを各々接続する。データバスB5002は、ＣＰＵ5010と内蔵揮発性メモリ5030と訂正アドレスレジスタ5040と訂正データレジスタ5050とデータ変換手段5080と外部メモリ5090とを各々接続する。
【０１５５】
ＣＰＵ5010から出力された訂正アドレス書込み信号S5007は、訂正アドレスレジスタ5040に入力されている。訂正アドレスレジスタ5040から出力された訂正アドレス信号S5003は、比較手段5060のもう一方に入力されている。
【０１５６】
ＣＰＵ5010から出力された訂正データ書込み信号S5008は、訂正データレジスタ5050に入力されている。訂正データレジスタ5050から出力された訂正データ信号S5004は、データ変換手段5080に入力されている。
【０１５７】
比較手段5060の出力の一致信号S5005は、比較結果記憶手段5070とデータ変換手段3080に入力されている。
解読手段5110から出力されたサブルーチン復帰信号5009は、比較結果記憶手段5070に入力されている。比較結果記憶手段5070の出力の一致状態保持信号S5006は、データ変換手段5080に入力されている。
【０１５８】
内蔵不揮発性メモリ5020とデータ変換手段5080とは、ＲＯＭバスB5011で接続されている。
ＣＰＵ5010の出力するリード信号S5012は、内蔵不揮発性メモリ5020と、内蔵揮発性メモリ5030と、外部メモリ5090に入力されている。ＣＰＵ5010の出力するライト信号S5013は、内蔵揮発性メモリ5030に入力されている。
【０１５９】
比較結果記憶手段5070は、一致信号S5005の値が‘１’であれば、‘１’の値を格納保持し、サブルーチン復帰信号S5009の値が‘１’であれば、‘０’の値を格納保持し、保持した値を一致状態保持信号S5006に出力する。また、比較結果記憶手段3070の初期値は‘０’とする。
【０１６０】
解読手段5110は、ＣＰＵ5010がデータバスB5002から読み込んだ命令コードを解読し、命令コードがサブルーチン復帰命令か否かを判定し、サブルーチン復帰命令の場合には‘１’を、それ以外の場合には‘０’をサブルーチン復帰信号S5009に出力する。
【０１６１】
次に、内蔵不揮発性メモリ5020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ5000の動作に基づいて説明する。なお、プログラムスタート時および、以下に示すプログラム（Ａ）（Ｂ）（Ｃ）を初期化プログラムとして実行する動作については、（実施の形態１）と同一である。
【０１６２】
プログラム（Ａ）は、外部メモリ5090から、内蔵不揮発性メモリ5020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ5040に設定する。
【０１６３】
プログラム（Ｂ）は、外部メモリ5090から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データレジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ5030に外部メモリ5090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
【０１６４】
プログラム（Ｃ）は、外部メモリ5090から、被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ5030に転送する。
以上の（Ａ）（Ｂ）（Ｃ）の初期化プログラムでプログラム訂正の準備が完了した状態で、ＣＰＵ5010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作についても、（実施の形態１）と同一である。
【０１６５】
この実施の形態では、代替プログラムを実行した後にデータの無効化を解除する方法が、（実施の形態１）と異なるため、以下にデータの無効化を解除するときの動作を説明する。
【０１６６】
代替プログラムの実行は、通常、被訂正プログラムの先頭アドレスの命令コードを代替プログラムの先頭アドレスにサブルーチン分岐することで実現する。そこで、代替プログラムの完了時にはサブルーチン復帰する命令を実行するものとする。またサブルーチン復帰命令で復帰するアドレスは、内蔵不揮発性メモリ5020に該当するアドレスであるものとする。
【０１６７】
ＣＰＵ5010は、データバスB5002から内蔵揮発性メモリ5030に格納されているサブルーチン復帰する命令コードを読み出す。解読手段5110は、ＣＰＵ5010がデータバスB5002から読み込んだ命令コードを解読し、命令コードがサブルーチン復帰命令であるため、‘１’をサブルーチン復帰信号S5009に出力する。比較結果記憶手段5070は、サブルーチン復帰信号S5009の値が‘１’であるため、‘０’の値を格納保持し、保持した値‘０’を一致状態保持信号S5006に出力する。
【０１６８】
次にＣＰＵ5010は、サブルーチン復帰命令を実行し、アドレスバスB5001に復帰先である内蔵不揮発性メモリ5020の該当するアドレスを出力すると共に、リード信号S5012に‘１’を出力する。内蔵不揮発性メモリ5020は、リード信号の値が‘１’であるため、アドレスバスB5001のアドレスに該当するデータをＲＯＭバスB5011に出力する。比較手段5060はアドレスバスB5001の値と、訂正アドレス信号S5003の値が異なるため、一致信号S5005に ‘０’を出力する。比較結果記憶手段は、一致信号S5005の値が‘０’であるため、一致状態保持信号に引き続き‘０’を出力する。データ変換手段5080は、一致信号S5005の値が‘０’で、かつ一致状態保持信号S5006の値が’０‘であるため、ＲＯＭバスB5011のデータをデータバスB5002に載せ換えて出力する。
【０１６９】
このように、サブルーチン復帰命令で代替プログラムを完了すると、解読手段5110がサブルーチン復帰信号S5009に‘１’を出力し、比較結果記憶手段5070の値を‘０’にリセットするため、再び内蔵不揮発性メモリ5020から、データを読み出すことが可能となる。
【０１７０】
また、データの読み出し保護を解除するための命令を実行する必要がないため、セキュリティを解除する手間を省くことができる。
（実施の形態７）
図７は本発明の（実施の形態７）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図７では、図１におけるＣＰＵ110に相当するＣＰＵ6010は、アクセスがオペランドフェッチであるか否かを判定するフェッチ判定手段6130を備えている。また、図１における訂正アドレスレジスタ140に相当する訂正アドレスレジスタ6040とは別に、復帰アドレス記憶手段としての復帰アドレスレジスタ6120が設けられている。また、図１における比較手段160に相当する比較手段6060とは別に、第２の比較手段としての比較手段6100が設けられている。２入力１出力アンドゲート6110も追加されている。なお、図７では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
【０１７１】
マイクロコンピュータ6000は、ＣＰＵ6010と内部不揮発性メモリ6020と内部揮発性メモリ6030と訂正アドレスレジスタ6040と訂正データレジスタ6050と第１の比較手段としての比較手段6060と比較結果記憶手段6070とデータ変換手段6080と第２の比較手段としての比較手段6100と２入力１出力のアンドゲート6110と復帰アドレス記憶手段としての復帰アドレスレジスタ6120によって構成されている。6090は前記マイクロコンピュータ5000の外部に接続される外部メモリである。
【０１７２】
アドレスバスB6001は、ＣＰＵ6010と内蔵不揮発性メモリ6020と内蔵揮発性メモリ6030と比較手段6060，6120と外部メモリ6090とを各々接続する。データバスB6002は、ＣＰＵ6010と内蔵揮発性メモリ6030と訂正アドレスレジスタ6040と訂正データレジスタ6050とデータ変換手段6080と復帰アドレスレジスタ6120と外部メモリ6090とを各々接続する。
【０１７３】
ＣＰＵ6010が出力する訂正アドレス書込み信号S6007は、訂正アドレスレジスタ6040に入力されている。訂正アドレスレジスタ6040の出力の訂正アドレス信号S6003は、比較手段6060のもう一方の入力に入力されている。比較手段6060の出力の一致信号S6005は、比較結果記憶手段6070とデータ変換手段6080に入力されている。ＣＰＵ6010が出力する訂正データ書込み信号S6008は、訂正データレジスタ6050に入力されている。訂正データレジスタ6050の出力の訂正データ信号S6004は、データ変換手段6080に入力されている。
【０１７４】
ＣＰＵ6010の出力の復帰アドレス書込み信号6009は、復帰アドレスレジスタ6120に入力されている。復帰アドレスレジスタ6120の出力の復帰アドレス信号S6014は、比較手段6100のもう一方の入力に入力されている。比較手段6100の出力の復帰アドレス一致信号S6015は、２入力１出力アンドゲート6110の一方の入力に入力されている。２入力１出力アンドゲート6110の他方の入力には、フェッチ判定手段6130の出力のオペコードフェッチ信号S6016が入力されている。２入力１出力アンドゲート6110の出力のリセット信号S6017は、比較結果記憶手段6070に入力されている。比較結果記憶手段6070の出力の一致状態保持信号S6006は、データ変換手段6080に入力されている。
【０１７５】
内蔵不揮発性メモリ6020とデータ変換手段6080とは、ＲＯＭバスB6011で接続されている。
ＣＰＵ6010の出力したリード信号S6012は、内蔵不揮発性メモリ6020と内蔵揮発性メモリ6030と外部メモリ6090とを各々接続する。ＣＰＵ6010の出力したライト信号S6013は、内蔵揮発性メモリ6030に入力されている。
【０１７６】
比較手段6040は、アドレスバスB6001のアドレスと訂正アドレス信号S6003の値とを比較し、一致した場合には‘１’を、一致しない場合には‘０’を一致信号S6005に出力する。
【０１７７】
復帰アドレスレジスタ6120は、復帰アドレス書込み信号S6009が‘１’であれば、データバスB6002のデータを格納保持し、保持したデータを復帰アドレス信号S6014として出力する。また、復帰アドレスレジスタ6120の初期値は、内蔵不揮発性メモリ6020に該当しないアドレスの値とする。
【０１７８】
比較手段6100は、アドレスバスB6001のアドレスと復帰アドレス信号S6014の値とを比較し、一致した場合には‘１’を、一致しない場合には‘０’を復帰アドレス一致信号S6015に出力する。
【０１７９】
アンドゲート6110は、復帰アドレス一致信号S6015の値と、オペコードフェッチ信号S6016の値との論理積を、リセット信号S6107に出力する。
ＣＰＵ6010は、アドレスバスB6001に内蔵揮発性メモリ6020に該当するアドレスを出力すると共に、リード信号S6012に‘１’を出力し、順次、内蔵不揮発性メモリ6020に格納されているプログラムを、ＲＯＭバスB6011、データ変換手段6080を介してデータバスB6002から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ6020から読み出したプログラムが、内蔵揮発性メモリ6030又は外部メモリ6090への分岐命令である場合には、アドレスバスB6001に内蔵揮発性メモリ6030又は外部メモリ6090の該当するアドレスを出力すると共に、リード信号Ｓ６０１２に‘１’を出力し、内蔵揮発性メモリ6030又は外部メモリ6090に格納されているプログラムを、データバスB6002から読み出し、解読した結果に従い各種制御を行う。
【０１８０】
また、ＣＰＵ6010は、ライト信号S6013に‘１’、アドレスバスB6001に内蔵揮発性メモリ6030に該当するアドレスを各々出力すると共に、データバスB6002にデータを出力し、内蔵揮発性メモリ6030に任意の値を書き込むことができる。また、ＣＰＵ6010は、データバスB6002にデータを出力すると共に訂正アドレス書込み信号S6007に‘１’を出力し、訂正アドレスレジスタ6040を任意の値に書き換えることができる。同様にＣＰＵ6010は、データバスB6002にデータを出力すると共に訂正データ書込み信号S6008に‘１’を出力し、訂正データレジスタ6050を任意の値に書き換えることができる。同様にＣＰＵ6010は、データバスB6002にデータを出力すると共に復帰アドレス書込み信号S6009に‘１’を出力し、復帰アドレスレジスタ6120を任意の値に書き換えることができる。
【０１８１】
次に、内蔵不揮発性メモリ6020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータの動作に基づいて説明する。
先ず、プログラムスタート時のＣＰＵ6010は、アドレスバスB6001に内蔵不揮発性メモリ6020に該当するアドレスを出力すると共に、リード信号S6012に‘１’を出力し、内蔵不揮発性メモリ6020に格納されているプログラムを読み出そうとする。
【０１８２】
この時、訂正アドレスレジスタ6040は、初期値として格納している内蔵不揮発性メモリ6020に該当しないアドレスを訂正アドレス信号S6003に出力する。第１の比較手段6050は、アドレスバスB6001に出力されている内蔵不揮発性メモリ6020に該当するアドレスと、訂正アドレス信号6003に出力されている内蔵不揮発性メモリ6020に該当しないアドレスとを比較し、一致しないため一致信号S6005に‘０’を出力する。復帰アドレスレジスタ6120は、初期値として格納している内蔵不揮発性メモリ6020に該当しないアドレスを復帰アドレス信号に出力する。比較手段6100は、アドレスバスB6001に出力されている内蔵不揮発性メモリ6020に該当するアドレスと、復帰アドレス信号6014に出力されている内蔵不揮発性メモリ6020に該当しないアドレスとを比較し、一致しないため復帰アドレス一致信号S6015に‘０’を出力する。比較結果記憶手段6070は、一致信号S6015の値が‘０’のため、一致状態保持信号S6006に‘０’を出力し続ける。
【０１８３】
フェッチ判定手段6130は、ＣＰＵ6010が行っているアクセスが命令コードを読み出すオペコードフェッチのため、オペコードフェッチ信号S6016に‘１’を出力する。アンドゲート6110は、オペコードフェッチ信号S6016の値‘１’と復帰アドレス一致信号の値‘０’との論理積‘０’をリセット信号に出力する。
【０１８４】
比較結果記憶手段6070は、一致信号S6005の値が‘０’で、かつリセット信号S6015の値が‘０’のため、一致状態保持信号S6006に初期値‘０’を出力し続ける。データ変換手段6080は、一致信号S6005が‘０’で、かつ一致状態保持信号S6006が‘０’のため、内蔵不揮発性メモリ6020からＲＯＭバスB6011に出力された読み出しデータを、データバスB6002に乗せ換えて出力する。
【０１８５】
このように、ＣＰＵ6010は順次、内蔵不揮発性メモリ6020の該当アドレスに格納されているプログラムを、ＲＯＭバスB6011およびデータ変換手段6080を介してデータバスB6002から読み出し、解読した結果に従い各種制御を行う。
【０１８６】
次に、ＣＰＵ6010は、内蔵不揮発性メモリ6020が格納するプログラムの任意のアドレスから始まるプログラムを訂正するため、以下に示すプログラム（Ａ）（Ｂ）（Ｃ）（Ｄ）を初期化プログラムとして実行する。
【０１８７】
プログラム（Ａ）は、外部メモリ6090から、内蔵不揮発性メモリ6020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ6040に設定する。
【０１８８】
プログラム（Ｂ）は、外部メモリ6090から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。通常、置換する命令コードは、後述する、内蔵揮発性メモリ6030に外部メモリ6090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令である。
【０１８９】
プログラム（Ｃ）は、外部メモリ6090から、後述する代替プログラムを実行した後に、内蔵不揮発性メモリ6020へとサブルーチン復帰する復帰先のアドレス値（以下、復帰アドレスという）を読み出し、復帰アドレスレジスタに設定する。
【０１９０】
プログラム（Ｄ）は、外部メモリ6090から、被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ6030に転送する。
先ず、ＣＰＵ6010がプログラム（Ａ）を読み出すと、ＣＰＵ6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘１’を出力し、外部メモリ6090に予め格納された、被訂正プログラムの先頭アドレス値を読み出す。更にＣＰＵ6010は、設定アドレス書込み信号S6007に‘１’を出力するとともに、データバスB6001に先ほど読み出した、被訂正プログラムの先頭アドレスを出力し、訂正アドレスレジスタ6040に設定する。
【０１９１】
次に、ＣＰＵ6010がプログラム（Ｂ）を読み出すと、ＣＰＵ6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘１’を出力し、外部メモリ6090に予め格納された、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出す。更にＣＰＵ6010は、設定データ書込み信号S6008に‘１’を出力するとともに、データバスB6001に先ほど読み出した、被訂正プログラムの先頭アドレスに格納されている命令コードを置換する命令コードを出力し、訂正データレジスタ6050に設定する。この時、置換する命令コードは、内蔵揮発性メモリ6030に外部メモリ6090から転送する後述の代替プログラムルーチンの先頭にサブルーチン分岐する命令であるとする。
【０１９２】
次に、ＣＰＵ6010がプログラム（Ｃ）を読み出すと、ＣＰＵ6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘１’を出力し、外部メモリ6090に予め格納された、復帰アドレス値を読み出す。更にＣＰＵ6010は、復帰アドレス書込み信号S6009に‘１’を出力するとともに、データバスB6001に先ほど読み出した復帰アドレスを出力し、復帰アドレスレジスタ6120に設定する。
【０１９３】
次に、ＣＰＵ6010がプログラム（Ｄ）を読み出すと、ＣＰＵ6010はアドレスバスB6001に、外部メモリ6090に該当するアドレスを出力すると共に、リード信号S6012に‘１’を出力し、外部メモリ6090に予め格納された、代替プログラムを順次読み出す。更にＣＰＵ6010はライト信号S6013に‘１’を、アドレスバスB6001に内蔵揮発性メモリ6030に該当するアドレスを各々出力するとともに、データバスB6002に先ほど読み出した代替プログラムを出力し、内蔵揮発性メモリ6030に書き込む。
【０１９４】
プログラム（Ｄ）を繰り返すことで、外部メモリ6090から代替プログラムを内蔵揮発性メモリ6030に順次転送する。
以上の（Ａ）（Ｂ）（Ｃ）（Ｄ）の初期化プログラムでプログラム訂正の準備が完了した状態で、ＣＰＵ6010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【０１９５】
ＣＰＵ6010は、アドレスバスB6001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S6012に‘１’を出力する。比較手段6060はアドレスバスB6001の値と、訂正アドレス信号S6003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S6005にアドレスバスB6001のアドレスと訂正アドレス信号S6003の値とが一致したことを示す‘１’を出力する。比較結果記憶手段6070は、一致信号S6005の値‘１’を受けて‘１’の値を格納保持し、一致状態保持信号S6006に‘１’を出力する。
【０１９６】
データ変換手段6080は、一致信号S6005が‘１’であるため、訂正データ信号S6004の値をデータバスB6002に出力する。
次にＣＰＵ6010はデータバスB6002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ6030に外部メモリ6090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ6030の該当アドレスへと変更し、アドレスバスB6001に該当アドレスを出力すると共に、リード信号S6012に‘１’を出力し、内蔵揮発性メモリ6030の該当アドレスに格納されている代替プログラムをデータバスB6002から順次読み出し、代替プログラム実行する。
【０１９７】
更に、代替プログラムの実行を終えるときには、ＣＰＵ6010は、内蔵揮発性メモリ6030の該当アドレスに格納されている代替プログラムの末尾で内蔵不揮発性メモリ6020にサブルーチン復帰する命令をデータバスB6002から読み出す。ＣＰＵ6010は、前記命令を解読しアドレスバスB6001を内蔵不揮発性4030の復帰アドレスに切り替えて出力すると共に、リード信号S6012に‘１’を出力する。フェッチ判定手段6130は、内蔵不揮発性メモリ6030へのアクセスが命令コードを読み出すオペコードフェッチであるため、オペコードフェッチ信号S6016に‘１’を出力する。比較手段6060は、アドレスバスB6001に出力されている復帰アドレスと、訂正アドレス信号に出力されている訂正アドレスとを比較し、一致しないことを示す‘０’の値を一致信号S6005に出力する。比較手段6120は、アドレスバスB6001に出力されているアドレスと、復帰アドレス信号S6014に出力されているアドレスが共に復帰アドレスであるため、復帰アドレス一致信号に‘１’を出力する。アンドゲート6110は、オペコードフェッチ信号S6016の値‘１’と復帰アドレス一致信号S6015の値‘１’との論理積‘１’をリセット信号S6007に出力する。比較結果記憶手段6070は、一致信号S6005の値が‘０’、リセット信号の値‘１’を受けて、‘０’の値を格納保持し、一致状態保持信号S6006に‘０’を出力する。データ変換手段6080は、一致信号S6005が‘０’で、かつ一致状態保持信号S6006が‘０’のため、内蔵不揮発性メモリ6020からＲＯＭバスB6011に出力された読み出しデータを、データバスB6002に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ6020からプログラムおよびデータを読み出すことが可能となる。
【０１９８】
ここで、不正ユーザが外部メモリ6090に格納されたプログラムを改変し、代替プログラムを、復帰アドレスからデータを読み出すアクセスを行う記述にして、比較結果記憶手段6070の値をリセットしようとしたとする。
【０１９９】
ＣＰＵ6010が内蔵揮発性メモリ6030から、改変された代替プログラムを読み出すと、ＣＰＵ6010は、アドレスバスB6001に、内蔵不揮発性メモリ6020に該当する復帰アドレスを出力すると共に、リード信号S6012に‘１’を出力する。フェッチ判定手段6130は、復帰アドレスへのアクセスがデータを読み出すオペランドフェッチのため、オペコードフェッチ信号に‘０’を出力する。比較手段6060はアドレスバスB6001の値と、訂正アドレス信号S6003の値が異なるため一致信号S6005に‘０’を出力する。比較手段6120は、アドレスバスB6001に出力されているアドレスと、復帰アドレス信号S6014に出力されているアドレスが共に復帰アドレスであるため、復帰アドレス一致信号に‘１’を出力する。アンドゲート6110は、オペコードフェッチ信号S6016の値‘０’と復帰アドレス一致信号S6015の値‘１’との論理積‘０’をリセット信号S6007に出力する。比較結果記憶手段6070は、一致信号S6005の値が‘０’、リセット信号の値‘０’を受けて、一致状態保持信号S6006に‘１’を出力し続ける。データ変換手段6080は、一致信号S6005が‘０’で、かつ一致状態保持信号S6006が‘１’のため、内蔵不揮発性メモリ6020からＲＯＭバスB6011に出力された読み出しデータを、無効化して何も出力しない。
【０２００】
このようにして、代替プログラムを復帰アドレスからデータを読み出すアクセスを行う記述にして、比較結果記憶手段6070の値をリセットしようとしても、データを読み出すアクセスでは、フェッチ判定手段6130がオペコード信号S6016に‘０’を出力し、アンドゲート6110は、オペコード信号S6016の値‘０’を受けてリセット信号S6017に‘０’を出力するため、比較結果記憶手段6070の値はリセットされず、データ変換手段6080は、一致信号S6005が‘０’で、かつ一致状態保持信号S6006が‘１’であるため、内蔵不揮発性メモリ6020からＲＯＭバスB6011に出力されたプログラムおよびデータを、データバスB6002に出力しない。これにより、内蔵不揮発性メモリ6020の保護エリアに格納されたプログラムおよびデータは、データバスB6002等から、マイクロコンピュータ6000の外部へ出力されることはない。
【０２０１】
また、不正ユーザが外部メモリ6090に格納されたプログラムを改変し、代替プログラムを、復帰アドレスへの分岐命令として、命令を読み出すアクセスを行う記述にしても、プログラムの読み出し先自体が内蔵不揮発性メモリ6020へと移行してしまい、内蔵揮発性メモリ6030に格納した、代替プログラムから内蔵不揮発性メモリ6020の値を読み出すことはできない。
【０２０２】
このようにマイクロコンピュータ6000を、内蔵不揮発性メモリ6020と、内蔵揮発性メモリ6030と、訂正アドレスレジスタ6040と、訂正データレジスタ6050と、比較手段6060と、比較結果記憶手段6070と、データ変換手段6080と、比較手段6100と、アンドゲート6110とで構成することで、内蔵不揮発性メモリ6020のプログラムを訂正しつつ、不正ユーザが外部メモリ6090を改変し、内蔵不揮発性メモリ6020に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、内蔵不揮発性メモリ6020に格納されたデータは読み出すことができずセキュリティが向上する。
【０２０３】
また、セキュリティの解除は、内蔵揮発性メモリ6030に格納されている代替プログラムの末尾で、内蔵不揮発性メモリ6020に格納されているプログラムへ分岐命令などを使って復帰すればよく、安全にセキュリティの解除を行うことが可能となる。
【０２０４】
なお、データ変換手段6080は、データ無効化の方法として、内蔵不揮発性メモリ6020から読み出したプログラムおよびデータをデータバスB6002に何も出力しないとしたが、他に、リード信号S6012に‘１’を出力しない、アドレスバスB6001に該当アドレスを与えない、データバスB6002に任意のデータを出力するなどといった、該当するアドレスに格納されたプログラムおよびデータが読み出されない構成であれば良い。
【０２０５】
（実施の形態８）
図８は本発明の（実施の形態８）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図８では、ダイレクトメモリアクセスコントローラ7100（以下、ＤＭＡＣ7100という）と、アンドゲート7110と、インバータ7120が追加されている。なお、図８では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
【０２０６】
マイクロコンピュータ7000は、ＣＰＵ7010と、内蔵不揮発性メモリ7020と、内蔵揮発性メモリ7030と、訂正アドレスレジスタ7040と、訂正データレジスタ7050と、比較手段7060と、比較結果記憶手段7070と、データ変換手段7080と、ＤＭＡＣ7100と、アンドゲート7110と、インバータ7120とによって構成されている。前記ＤＭＡＣ7100は、内部に読み出しアドレス記憶手段としてのソースレジスタ7130を備えている。また、7090は前記マイクロコンピュータ7000の外部に接続される外部メモリである。
【０２０７】
アドレスバスB7001は、ＣＰＵ7010と内蔵不揮発性メモリ7020と内蔵揮発性メモリ7030と比較手段7060と外部メモリ7090とＤＭＡＣ7100とを各々接続する。データバスB7002は、ＣＰＵ7010と内蔵揮発性メモリ7030と訂正アドレスレジスタ7040と訂正データレジスタ7050とデータ変換手段7080と外部メモリ7090とＤＭＡＣ7100とを各々接続する。
【０２０８】
ＣＰＵ7010が出力する訂正アドレス書込み信号S7007は、訂正アドレスレジスタ7040に入力されている。  訂正アドレスレジスタ7040の出力の訂正アドレス信号S7003は、比較手段7060のもう一方の入力に入力されている。
【０２０９】
ＣＰＵ7010が出力する訂正データ書込み信号Ｓ7008は、訂正データレジスタ7050に入力されている。訂正データレジスタ7050の出力の訂正データ信号S7004は、データ変換手段7080に入力されている。
【０２１０】
比較手段7060の出力する一致信号S7005は、比較結果記憶手段7070とデータ変換手段7080に入力されている。ＣＰＵ7010が出力するセット信号S7009は、比較結果記憶手段7070に入力されている。比較結果記憶手段7070の出力の一致状態保持信号S7006は、データ変換手段7080と、インバータ7120の入力に入力されている。
【０２１１】
内蔵不揮発性メモリ7020とデータ変換手段7080は、ＲＯＭバスB7011で接続されている。ＣＰＵ7010が出力するリード信号S7012は、内蔵不揮発性メモリ7020と、内蔵揮発性メモリ7030と、外部メモリ7090と、ＤＭＡＣ7100とを各々接続する。ＣＰＵ7010が出力するライト信号S7013は、内蔵揮発性メモリ7030と、ＤＭＡＣ7100とを接続する。
【０２１２】
インバータ7120は、一致状態保持信号S7006の値を反転して反転一致状態保持信号S7016としてアンドゲート7110の一方の入力に入力する。アンドゲート7110の他方の入力には、ＣＰＵ7010が出力する原ソースアドレス書込み信号S7014が入力されており、アンドゲート7110の出力のソースアドレス書込み信号S7015は、ソースレジスタ7130に入力されている。起動信号S7017は、マイクロコンピュータ7000の外部からＤＭＡＣ7100に入力される。ＤＭＡＣ7100は、起動信号S7017が‘１’ならば、アクティブ信号S7113に‘１’を出力する。このアクティブ信号S7113は、ＣＰＵ7010に入力されている。
【０２１３】
ＤＭＡＣ7100は、ソースアドレス書込み信号S7015が‘１’であれば、データバスB7002のデータを ソースレジスタ7130に格納保持し、起動信号S7017が‘１’になれば、ソースレジスタ7130に格納されたアドレスに該当するメモリ領域から、任意のメモリ領域へ、ＣＰＵ7010を介さずにプログラムおよびデータを転送する。次にＤＭＡＣ7100は、ソースレジスタ7130に格納されたアドレスをアドレスバスB7001に出力すると共に、リード信号7012に‘１’を出力し、該当アドレスに格納されたプログラムおよびデータをデータバスB7001から読み出す。
【０２１４】
続いて、ＤＭＡＣ7100は、読み出したデータおよびプログラムをデータバスB7002に出力し、アドレスバスB7001に任意のアドレスを出力すると共に、ライト信号S7013に‘１’を出力し、該当アドレスにデータを書き込む。書込みが完了するとアクティブ信号に‘０’を出力する。
【０２１５】
アンドゲート7110は、反転一致状態保持信号S7016の値と、原ソースアドレス書込み信号S7014の値との論理積をソースアドレス書込み信号S7015に出力する。すなわち、反転一致状態保持信号S7016が‘０’のときに、ソースアドレス書込み信号S7015に‘０’を出力し、原ソースアドレス書込み信号S7014の値を無効化する。
【０２１６】
ＣＰＵ7010は、アドレスバスB7001に内蔵揮発性メモリ7020に該当するアドレスを出力すると共に、リード信号S7012に‘１’を出力し、順次、内蔵不揮発性メモリ7020に格納されているプログラムを、ＲＯＭバスB7011、データ変換手段7080を介してデータバスB7002から読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ7020から読み出したプログラムが、内蔵揮発性メモリ7030又は外部メモリ7080への分岐命令である場合には、アドレスバスB7001に内蔵揮発性メモリ7030又は外部メモリ7080の該当するアドレスを出力すると共に、リード信号S7012に‘１’を出力し、内蔵揮発性メモリ7030又は外部メモリ7080に格納されているプログラムを、データバスB7002から読み出し、解読した結果に従い各種制御を行う。
【０２１７】
また、ＣＰＵ7010は、ライト信号S7013に‘１’、アドレスバスB7001に内蔵揮発性メモリ7030に該当するアドレスを各々出力すると共に、データバスB7002にデータを出力し、内蔵揮発性メモリ7030に任意の値を書き込むことができる。また、ＣＰＵ7010は、データバスB7002にデータを出力すると共に訂正アドレス書込み信号S7007に‘１’を出力し、訂正アドレスレジスタ7040を任意の値に書き換えることができる。同様にＣＰＵ7010は、データバスB7002にデータを出力すると共に訂正データ書込み信号S7008に‘１’を出力し、訂正データレジスタ7050を任意の値に書き換えることができる。更にＣＰＵ7010は、リセット信号S7009に‘１’を出力し、比較結果記憶手段7070の値を‘０’にリセットすることができる。加えて、ＣＰＵ7010は、データバスB7002にデータを出力すると共に原ソースアドレス書込み信号S7014に‘１’を出力し、アンドゲート7110を介して、ソースアドレスレジスタ7120を任意の値に書き換えることができる。また、ＣＰＵ7010は、アクティブ信号S7113が‘１’のときには各種制御を停止する。
【０２１８】
次に、内蔵不揮発性メモリ7020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータ7000の動作を説明する。なお、プログラムスタート時および以下に示すプログラム（Ａ）（Ｂ）（Ｃ）を初期化プログラムとして実行する動作については、（実施の形態１）と同一である。
【０２１９】
プログラム（Ａ）は、外部メモリ7090から内蔵不揮発性メモリ7020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ7040に設定する。
【０２２０】
プログラム（Ｂ）は、外部メモリ7090から被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、後述する、内蔵揮発性メモリ7030に外部メモリ7090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
【０２２１】
プログラム（Ｃ）は、外部メモリ7090から被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ7030に転送する。
以上のように、（Ａ）（Ｂ）（Ｃ）の初期化プログラムでプログラム訂正の準備が完了した状態で、ＣＰＵ7010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【０２２２】
ＣＰＵ7010は、アドレスバスB7001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S7012に‘１’を出力する。比較手段7060はアドレスバスB7001の値と、訂正アドレス信号S7003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S7005にアドレスバスB7001のアドレスと訂正アドレス信号S7003の値とが一致したことを示す‘１’を出力する。比較結果記憶手段7070は、一致信号S7005の値‘１’を受けて‘１’の値を格納保持し、一致状態保持信号S7006に‘１’を出力する。
【０２２３】
データ変換手段7080は、一致信号S7005が‘１’であるため、訂正データ信号S7004の値をデータバスB7002に出力する。
次にＣＰＵ7010は、データバスB7002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ7030に外部メモリ7090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ7030の該当アドレスへと変更し、アドレスバスB7001に該当アドレスを出力すると共に、リード信号S7012に‘１’を出力し、内蔵揮発性メモリ7030の該当アドレスに格納されている代替プログラムをデータバスB8002から順次読み出し、代替プログラム実行する。
【０２２４】
ここで、不正ユーザが外部メモリ7090に格納されたプログラムを改変し、代替プログラムを、ソースアドレスレジスタ7130に内蔵不揮発性メモリ7020に該当するアドレスを設定し、代替プログラムの実行を完了した状態で、起動信号S7017を‘１’にすることで、ＤＡＭＣ7100のデータ転送機能を利用してデータおよびプログラムを読み出す記述にしたとする。
【０２２５】
ＣＰＵ7010が内蔵揮発性メモリ7030から、改変された代替プログラムを読み出すと、ＣＰＵ7010は、原ソースレジスタ書込み信号に‘１’を出力するとともに、データバスB7002に内蔵不揮発性メモリ7020に該当するアドレスを出力して、ソースレジスタ7130に内蔵不揮発性メモリ7020に該当するアドレスを設定しようとする。このとき、比較結果記憶手段7070は、一致状態保持信号S7006に‘１’を出力し続けている。
【０２２６】
インバータ7120は、一致状態保持信号S7006の値‘１’を反転した‘０’を反転一致信号S7016に出力する。アンドゲート7110は、反転一致信号S7016の値が‘０’のため、原ソースアドレス書込み信号S7014の値‘１’を無効化して、ソースアドレス信号S7015に‘０’を出力する。
【０２２７】
ソースアドレスレジスタ7130は、ソースアドレス書込み信号S7015が‘０’のため、データバスB7002に出力されている、内蔵不揮発性メモリ7020に該当するアドレスを格納することができない。これにより、ＤＭＡＣ7100の転送機能を用いて内蔵不揮発性メモリ7020に格納されたプログラムおよびデータを読み出されることはない。
【０２２８】
このように、マイクロコンピュータ7000を、内蔵不揮発性メモリ7020と、内蔵揮発性メモリ7030と、訂正アドレスレジスタ7040と、訂正データレジスタ7050と、比較手段7060と、比較結果記憶手段7070と、データ変換手段7080と、ＤＭＡＣ7100と、アンドゲート7110と、インバータ7120とで構成することで、内蔵不揮発性メモリ7020のプログラムを訂正しつつ、不正ユーザが外部メモリ7090を改変し、ＤＭＡＣ7100の転送機能を用いて内蔵不揮発性メモリ7020に格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中には、ソースアドレスレジスタ7130に読み出しアドレスを設定することができないため、内蔵不揮発性メモリ7020に格納されたデータは読み出すことができずセキュリティが向上する。
【０２２９】
（実施の形態９）
図９は本発明の（実施の形態９）のマイクロコンピュータを示し、図１と比べた場合には全体的なレイアウトは同じであるが、図９では、ダイレクトメモリアクセスコントローラ8100（以下、ＤＭＡＣ8100という）と、アンドゲート8110と、インバータ8120と、２入力１出力オアゲート8130が追加されている。なお、図８では、図１と同一名称であっても異なる符号を付しているが、特に説明しない場合には、同一の動作をする。
【０２３０】
ＤＭＡＣ8100には、アクセスしたいアドレスを記憶する読み出しアドレス記憶手段としてのソースレジスタ8140と、ソースレジスタ8140の書き換え時に、比較結果記憶手段8070が記憶する比較結果を記憶する書き換え条件記憶手段としてのソースレジスタ設定条件記憶手段8150を備えている。
【０２３１】
マイクロコンピュータ8000は、ＣＰＵ8010と、内蔵不揮発性メモリ8020と、内蔵揮発性メモリ8030と、訂正アドレス記憶手段としての訂正アドレスレジスタ8040と、訂正データ記憶手段としての訂正データレジスタ8050と、比較手段8060と、比較結果記憶手段8070と、データ変換手段8080と、ＤＭＡＣ8100と、２入力１出力アンドゲート8110と、２入力１出力アンドゲート8120と、２入力１出力オアゲート8130とによって構成されている。また、8090はマイクロコンピュータ8000の外部に接続される外部メモリである。
【０２３２】
アドレスバスB8001は、ＣＰＵ8010と、内蔵不揮発性メモリ8020と、内蔵揮発性メモリ8030と、比較手段8060と、外部メモリ8090と、ＤＭＡＣ8100とを各々接続する。データバスB8002は、ＣＰＵ8010と、内蔵揮発性メモリ8030と、訂正アドレスレジスタ8040と、訂正データレジスタ8050と、データ変換手段8080と、外部メモリ8090と、ＤＭＡＣ8100とを各々接続する。
【０２３３】
ＣＰＵ8010が出力する訂正アドレス書込み信号S8007は、訂正アドレスレジスタ8040に入力されている。
訂正アドレスレジスタ8040が出力する訂正アドレス信号S8003は、比較手段8060のもう一方の入力に入力されている。比較手段8060が出力する一致信号S8005は、比較結果記憶手段8070とデータ変換手段8080に入力されている。
【０２３４】
ＣＰＵ8010の出力する訂正データ書込み信号S8008は、訂正データレジスタ8050に入力されている。訂正データレジスタ8050の出力する訂正データ信号S8004は、データ変換手段8080に入力されている。
【０２３５】
ＣＰＵ8010の出力するリセット信号S8009は、比較結果記憶手段8070に入力されている。比較結果記憶手段8070の出力する一致状態保持信号S8006は、アンドゲート8110の入力と、オアゲート8130の入力に入力されている。アンドゲート8110のもう一方の入力には、ＣＰＵ8010の出力するソースアドレス書込み信号S8014が入力されている。また、ソースアドレス書込み信号S8014は、ソースレジスタ8140にも入力されている。アンドゲート8110の出力のソースアドレス設定条件信号S8015は、ソースレジスタ設定条件記憶手段8150に入力されている。ソースレジスタ設定条件記憶手段8150の出力する
ソースアドレス設定条件保持信号S8017は、アンドゲート8120の一方の入力に入力され、アンドゲート8120の他方の入力には、ＤＭＡＣ8100がＣＰＵ8010へ出力するアクティブ信号S8113が入力されている。アンドゲート8120の出力のＤＭＡ無効化信号S8016は、オアゲート8130の入力に入力されている。オアゲート8130の出力の無効化信号S8018は、データ変換手段8080に入力されている。
【０２３６】
内蔵不揮発性メモリ8020とデータ変換手段8080は、ＲＯＭバスB8011で接続されている。ＣＰＵ8010の出力するリード信号S8012は、内蔵不揮発性メモリ8020と内蔵揮発性メモリ8030と外部メモリ8090とＤＭＡＣ8100とを各々接続する。ＣＰＵ8010の出力するライト信号S8013は、内蔵揮発性メモリ8030とＤＭＡＣ8100とを接続する。マイクロコンピュータ8000の外部からＤＭＡＣ8100には、起動信号S8019が入力されている。
【０２３７】
データ変換手段8080は、一致信号S8005が‘１’であれば、内蔵不揮発性メモリ8020からＲＯＭバスB8011に出力された読み出しデータを訂正データ信号S8004の値に変換してデータバスB8002に出力する。また、一致信号S8005が‘０’で、かつ無効化信号S8006が‘１’であれば、内蔵不揮発性メモリ8020からＲＯＭバスB8011に出力された読み出しデータを無効化し、データバスB8002に何も出力しない。更に一致信号S8005が‘０’で、かつ一致状態保持信号S8006が‘０’であれば内蔵不揮発性メモリ8020からＲＯＭバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。
【０２３８】
ＤＭＡＣ8100は、起動信号S8019が‘１’になれば、ソースレジスタ8140に格納されたアドレスに該当するメモリ領域から、任意のメモリ領域へ、ＣＰＵ8010を介さずにプログラムおよびデータを転送する。
【０２３９】
ＤＭＡＣ8100は、プログラムおよびデータを読み出すアドレスを格納するソースレジスタ8140および、ある特定の条件でソースアドレスを設定したことを記憶するソースアドレス設定条件記憶手段8150を備えている。
【０２４０】
ソースレジスタ8140は、ソースアドレス書込み信号S8014が‘１’であれば、データバスB8002のデータを格納保持する。また、ソースアドレス設定条件記憶手段8150は、ソースアドレス設定条件信号S8015が‘１’ならば、‘１’の値を格納保持し、ソースアドレス設定条件保持信号S8017に‘１’を出力する。
【０２４１】
また、ＤＭＡＣ8100は、起動信号S8019が‘１’ならば、アクティブ信号S8113に‘１’を出力する。ＤＭＡＣ8100は、ソースレジスタ8120に格納されたアドレスをアドレスバスB8001に出力すると共に、リード信号8012に‘１’を出力し、該当アドレスに格納されたプログラムおよびデータをデータバスB8001から読み出す。
【０２４２】
続いて、ＤＭＡＣ8100は、読み出したデータおよびプログラムをデータバスB8002に出力し、アドレスバスB8001に任意のアドレスを出力すると共に、ライト信号S8013に‘１’を出力し、該当アドレスにデータを書き込む。書込みが完了するとアクティブ信号S8113に‘０’を出力する。
【０２４３】
アンドゲート8110は、比較結果保持信号S8006の値と、ソースアドレス書込み信号S8014の値との論理積をソースアドレス設定条件信号S8015に出力する。アンドゲート8120は、アクティブ信号S8113の値とソースアドレス設定条件保持信号S8017の値との論理積をＤＭＡ無効化信号S8016に出力する。オアゲート8130は、比較結果保持信号S8006の値とＤＭＡ無効化信号S8016の値との論理和を無効化信号S8018に出力する。
【０２４４】
ＣＰＵ8010は、アドレスバスB8001に内蔵揮発性メモリ8020に該当するアドレスを出力すると共に、リード信号S8012に‘１’を出力し、内蔵不揮発性メモリ8020に格納されているプログラムを、ＲＯＭバスB8011、データ変換手段8080を介してデータバスB8002から順次読み出し、解読した結果に従い各種制御を行う。また、内蔵不揮発性メモリ8020から読み出したプログラムが、内蔵揮発性メモリ8030又は外部メモリ8090への分岐命令である場合には、アドレスバスB8001に内蔵揮発性メモリ8030又は外部メモリ8090の該当するアドレスを出力すると共に、リード信号S8012に‘１’を出力し、内蔵揮発性メモリ8030又は外部メモリ8090に格納されているプログラムを、データバスB8002から読み出し、解読した結果に従い各種制御を行う。
【０２４５】
またＣＰＵ8010は、ライト信号S8013に‘１’、アドレスバスB8001に内蔵揮発性メモリ8030に該当するアドレスを各々出力すると共に、データバスB8002にデータを出力し、内蔵揮発性メモリ8030に任意の値を書き込むことができる。また、ＣＰＵ8010は、データバスB8002にデータを出力すると共に訂正アドレス書込み信号S8007に‘１’を出力し、訂正アドレスレジスタ8040を任意の値に書き換えることができる。同様にＣＰＵ8010は、データバスB8002にデータを出力すると共に訂正データ書込み信号S8008に‘１’を出力し、訂正データレジスタ8050を任意の値に書き換えることができる。更にＣＰＵ8010は、リセット信号S8009に‘１’を出力し、比較結果記憶手段8070の値を‘０’にリセットすることができる。加えて、ＣＰＵ8010は、データバスB8002にデータを出力すると共に原ソースアドレス書込み信号S8014に‘１’を出力し、ソースアドレスレジスタ8140を任意の値に書き換えることができる。また、ＣＰＵ8010は、アクティブ信号S8113が‘１’のときには各種制御を停止する。
【０２４６】
次に、内蔵不揮発性メモリ8020に格納されたプログラムおよびデータを訂正しつつ、読み出し保護を行うマイクロコンピュータの動作を説明する。なお、マイクロコンピュータ8000の外部から入力される起動信号S8019は、‘０’のままであるとする。
【０２４７】
先ず、プログラムスタート時のＣＰＵ8010は、アドレスバスB8001に、内蔵不揮発性メモリ8020に該当するアドレスを出力すると共に、リード信号S8012に‘１’を出力し、内蔵不揮発性メモリ8020に格納されているプログラムを読み出そうとする。この時、訂正アドレスレジスタ8040は、初期値として格納している内蔵不揮発性メモリ8020に該当しないアドレスの値を訂正アドレス信号S8003に出力する。比較手段8050は、アドレスバスB8001に出力されている内蔵不揮発性メモリ8020に該当するアドレスと、訂正アドレス信号8003に出力されている内蔵不揮発性メモリ8020に該当しないアドレスとを比較し、一致しないため一致信号S8005に‘０’を出力する。比較結果記憶手段8070は、一致信号S8005の値が‘０’のため、一致状態保持信号S8006に‘０’を出力し続ける。ＤＭＡ8100は、起動信号S8019が‘０’のままであるため、アクティブ信号S8113に‘０’を出力する。アンドゲート8120は、起動信号S8019が‘０’のため、ＤＭＡ無効化信号S8106に‘０’を出力する。オアゲート8130は、一致状態保持信号S8006の値‘０’とＤＭＡ無効化信号S8016の値‘０’との論理和‘０’を無効化信号S8018に出力する。データ変換手段8080は、一致信号S8005が‘０’かつ無効化信号S8018が‘０’のため、内蔵不揮発性メモリ8020からＲＯＭバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。
【０２４８】
このように、ＣＰＵ8010は、内蔵不揮発性メモリ8020の該当アドレスに格納されているプログラムを、ＲＯＭバスB8011およびデータ変換手段8080を介してデータバスB8002から順次読み出し、解読した結果に従い各種制御を行う。
【０２４９】
次に、ＣＰＵ8010は、内蔵不揮発性メモリ8020が格納するプログラムの任意のアドレスから始まるプログラムを訂正するため、以下に示すプログラム（Ａ）（Ｂ）（Ｃ）を初期化プログラムとして実行する。
【０２５０】
プログラム（Ａ）は、外部メモリ8090から、内蔵不揮発性メモリ8020に格納された訂正するべきプログラム（以下、被訂正プログラムという）の先頭アドレス値を読み出し、訂正アドレスレジスタ8040に設定する。
【０２５１】
プログラム（Ｂ）は、外部メモリ8090から、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出し、訂正データ設定レジスタに設定する。置換する命令コードは、後述する、内蔵揮発性メモリ8030に外部メモリ8090から転送する代替プログラムルーチンの先頭にサブルーチン分岐する命令であるものとする。
【０２５２】
プログラム（Ｃ）は、外部メモリ8090から、被訂正プログラムを代替するプログラム（以下、代替プログラムという）を内蔵揮発性メモリ8030に転送する。
先ず、ＣＰＵ8010がプログラム（Ａ）を読み出すと、ＣＰＵ8010は、アドレスバスB8001に、外部メモリ8090に該当するアドレスを出力すると共に、リード信号S8012に‘１’を出力し、外部メモリ8090に予め格納された、被訂正プログラムの先頭アドレス値を読み出す。更にＣＰＵ8010は、設定アドレス書込み信号S8007に‘１’を出力するとともに、データバスB8001に先ほど読み出した、被訂正プログラムの先頭アドレスを出力し、訂正アドレスレジスタ8040に設定する。
【０２５３】
次に、ＣＰＵ8010がプログラム（Ｂ）を読み出すと、ＣＰＵ8010は、アドレスバスB8001に、外部メモリ8090に該当するアドレスを出力すると共に、リード信号S8012に‘１’を出力し、外部メモリ8090に予め格納された、被訂正プログラムの先頭アドレスに該当する命令コードを置換する命令コードを読み出す。更にＣＰＵ8010は、訂正データ書込み信号S8008に‘１’を出力するとともに、データバスB8001に先ほど読み出した、被訂正プログラムの先頭アドレスに格納されている命令コードを置換する命令コードを出力し、訂正データレジスタ8050に設定する。
【０２５４】
次に、ＣＰＵ8010がプログラム（Ｃ）を読み出すと、ＣＰＵ8010は、アドレスバスB8001に、外部メモリ8090に該当するアドレスを出力すると共に、リード信号S8012に‘１’を出力し、外部メモリ8090に予め格納された、代替プログラムを順次読み出す。更にＣＰＵ8010は、ライト信号S8013に‘１’を、アドレスバスB8001に内蔵揮発性メモリ8030に該当するアドレスを各々出力するとともに、データバスB8002に先ほど読み出した代替プログラムを出力し、内蔵揮発性メモリ8030に書き込む。プログラム（Ｃ）を繰り返すことで、外部メモリ8090から、代替プログラムを内蔵揮発性メモリ8030に順次転送する。
【０２５５】
以上のように、（Ａ）（Ｂ）（Ｃ）の初期化プログラムでプログラム訂正の準備が完了した状態で、ＣＰＵ8010が被訂正プログラムの先頭アドレスを実行しようとしたときの動作を説明する。
【０２５６】
ＣＰＵ8010は、アドレスバスB8001に被訂正プログラムの先頭アドレスを出力すると共に、リード信号S8012に‘１’を出力する。比較手段8060はアドレスバスB8001の値と、訂正アドレス信号S8003の値がともに被訂正プログラムの先頭アドレスのため、一致信号S8005にアドレスバスB8001のアドレスと訂正アドレス信号S8003の値とが一致したことを示す‘１’を出力する。比較結果記憶手段8070は、一致信号S8005の値‘１’を受けて‘１’の値を格納保持し、一致状態保持信号S8006に‘１’を出力する。
【０２５７】
オアゲート8130は、一致状態保持信号S8006の値が‘１’のため、無効化信号S8018に‘１’を出力する。
データ変換手段8080は、一致信号S8005が‘１’であるため、訂正データ信号S8004の値をデータバスB8002に出力する。
【０２５８】
次にＣＰＵ8010は、データバスB8002に出力された訂正データ信号の値が、予め内蔵揮発性メモリ8030に外部メモリ8090から転送された代替プログラムの先頭にサブルーチン分岐する命令であるため、プログラムの読み出し先を内蔵揮発性メモリ8030の該当アドレスへと変更し、アドレスバスB8001に該当アドレスを出力すると共に、リード信号S8012に‘１’を出力し順次、内蔵揮発性メモリ8030の該当アドレスに格納されている代替プログラムをデータバスB8002から読み出し、代替プログラム実行する。
【０２５９】
更に、代替プログラムの実行を終えるときには、ＣＰＵ8010は、リセット信号S8009に‘１’を出力する。比較結果記憶手段8070は、リセット信号S8009の値‘１’を受けて、‘０’の値を格納保持し一致状態保持信号S8006に‘０’を出力する。起動信号S8019が‘０’のため、ＤＭＡＣ8100は、アクティブ信号S8113に‘０’を出力する。アンドゲート8120は、アクティブ信号S8113が‘０’のため、ＤＭＡ無効化信号S8016に‘０’を出力する。オアゲート8130は、一致状態保持信号S8006の値‘０’とＤＭＡ無効化信号S8016の値‘０’との論理和‘０’を無効化信号S8018に出力する。データ変換手段8080は、一致信号S8005が‘０’かつ無効化信号S8006が‘０’のため、内蔵不揮発性メモリ8020からＲＯＭバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。このようにして、再び内蔵不揮発性メモリ8020からプログラムおよびデータを読み出すことが可能となる。
【０２６０】
ここで、不正ユーザが外部メモリ8090に格納されたプログラムを改変し、代替プログラムを、ソースアドレスレジスタ8140に内蔵不揮発性メモリ8020に該当するアドレスを設定し、代替プログラムの実行を完了した状態で、起動信号S8019を‘１’にすることで、ＤＡＭＣ8100のデータ転送機能を利用して内蔵不揮発性メモリ8020に格納されたデータおよびプログラムを読み出す記述にしたとする。
【０２６１】
ＣＰＵ8010が内蔵揮発性メモリ8030から、改変された代替プログラムを読み出すと、ＣＰＵ8010は、ソースアドレス書込み信号S8014に‘１’を出力するとともに、データバスB8002に内蔵不揮発性メモリ8020に該当するアドレスを出力して、ソースレジスタ8140に内蔵不揮発性メモリ8020に該当するアドレスを設定しようとする。ソースアドレスレジスタ8140は、ソースアドレス書込み信号S8014の値が‘１’なので、データバスB8002に出力されている内蔵不揮発性メモリ8020に該当するアドレスを格納保持する。このとき、比較結果記憶手段8070は、一致状態保持信号S8006に‘１’を出力し続けている。アンドゲート8110は、一致状態保持信号S8006の値‘１’と、ソースアドレス書込み信号S8014の値‘１’の論理積‘１’をソースアドレス設定条件信号S8015に出力する。ソースアドレス設定条件保持手段8150は、ソースアドレス設定条件信号S8015が‘１’のため、‘１’の値を格納、保持する。
【０２６２】
以上のＤＭＡＣの設定を完了すると、代替プログラムの完了手順を実行するため、ＣＰＵ8010は、リセット信号S8009に‘１’を出力する。比較結果記憶手段8070は、リセット信号S8009の値‘１’を受けて、‘０’の値を格納保持し一致状態保持信号S8006に‘０’を出力する。起動信号S8019が‘０’のため、ＤＭＡＣ8100は、アクティブ信号S8113に‘０’を出力する。アンドゲート8120は、アクティブ信号S8113が‘０’のため、ＤＭＡ無効化信号S8016に‘０’を出力する。オアゲート8130は、一致状態保持信号S8006の値‘０’とＤＭＡ無効化信号S8016の値‘０’との論理和‘０’を無効化信号S8018に出力する。データ変換手段8080は、一致信号S8005が‘０’かつ無効化信号S8006が‘０’のため、内蔵不揮発性メモリ8020からＲＯＭバスB8011に出力された読み出しデータを、データバスB8002に乗せ換えて出力する。このようにして、内蔵不揮発性メモリ8020からプログラムおよびデータを再び読み出すことが可能となる。
【０２６３】
次に、不正ユーザはマイクロコンピュータ8000の外部から入力される、起動信号S8019を‘１’にして、ＤＭＡＣ8100を起動して、内蔵不揮発性メモリ8020に格納されたデータおよびプログラムを読み出そうとする。
【０２６４】
ＤＭＡＣ8100は、起動信号S8019が‘１’のため、アクティブ信号S8113に‘１’を出力する。ＣＰＵ8010は、アクティブ信号S8113が‘１’のため、各種制御を停止する。
次に、ＤＭＡＣ8100は、ソースレジスタ8140に格納された内蔵不揮発性メモリ8020に該当するアドレスをアドレスバスB8001に出力すると共に、リード信号8012に‘１’を出力し、内蔵不揮発性メモリ8020に格納されたプログラムおよびデータをデータバスB8001から読み出そうとする。
【０２６５】
内蔵不揮発性メモリ8020は、リード信号S8012が‘１’のため、アドレスバスB8001のアドレスに該当するデータをＲＯＭバスB8011に出力する。
アンドゲート8120は、アクティブ信号S8113の値‘１’とソースアドレス設定条件保持信号S8017の値‘１’との論理積‘１’をＤＭＡ無効化信号に出力する。オアゲート8130は、一致状態保持信号S8006の値‘０’とＤＭＡ無効化信号S8017の値‘１’の論理和を‘１’を無効化信号S8018に出力する。
【０２６６】
データ変換手段8080は、一致信号S8005が‘０’で、かつ無効化信号S8006が‘１’のため、内蔵不揮発性メモリ8020からＲＯＭバスB8011に出力された読み出しデータを無効化し、データバスB8002に何も出力しない。これにより、内蔵不揮発性メモリ8020に格納されたプログラムおよびデータは、データバスB8002等から、マイクロコンピュータ8000の外部へ出力されることはない。
【０２６７】
以上のように、マイクロコンピュータ8000を内蔵不揮発性メモリ8020と、内蔵揮発性メモリ8030と、訂正アドレスレジスタ8040と、訂正データレジスタ8050と、比較手段8060と、比較結果記憶手段8070と、データ変換手段8080と、ＤＭＡＣ8100と、アンドゲート8110，8120と、オアゲート8130とで構成することで、内蔵不揮発性メモリ8020のプログラムを訂正しつつ、不正ユーザが外部メモリ8090を改変し、ＤＭＡＣ8100の転送機能を利用して、内蔵不揮発性メモリに格納されたプログラムおよびデータを読み出そうと試みても、代替プログラムの実行中にソースアドレスを設定したＤＭＡＣ8100による内蔵不揮発性メモリに格納されたデータの読み出しができずセキュリティが向上する。また、代替プログラムの実行中にソースアドレスの設定を禁止するものではないため、内蔵不揮発性メモリ8020以外からのＤＭＡＣ8100の転送設定の訂正は可能となる。
【産業上の利用可能性】
【０２６８】
本発明のマイクロコンピュータは、内蔵不揮発性メモリに格納されたプログラムやデータの訂正を可能にしつつ、訂正プログラムを実行中には、不正ユーザが前記不許可領域に格納された秘匿が必要なプログラムやデータを読み出そうと試みても、その読み出しを不可能にできるので、セキュリティを向上したマイクロコンピュータ等として有用である。
【図面の簡単な説明】
【０２６９】
【図１】本発明の（実施の形態１）におけるマイクロコンピュータのブロック図
【図２】本発明の（実施の形態２）におけるマイクロコンピュータのブロック図
【図３】本発明の（実施の形態３）におけるマイクロコンピュータのブロック図
【図４】本発明の（実施の形態４）におけるマイクロコンピュータのブロック図
【図５】本発明の（実施の形態５）におけるマイクロコンピュータのブロック図
【図６】本発明の（実施の形態６）におけるマイクロコンピュータのブロック図
【図７】本発明の（実施の形態７）におけるマイクロコンピュータのブロック図
【図８】本発明の（実施の形態８）におけるマイクロコンピュータのブロック図
【図９】本発明の（実施の形態９）におけるマイクロコンピュータのブロック図
【符号の説明】
【０２７０】
100，1000，2000，3000，4000，5000，6000，7000，8000    マイクロコンピュータ
110，1010，2010，3010，4010，5010，6010，7010，8010    ＣＰＵ（制御部）
120，1020，2020，3020，4020，5020，6020，7020，8020    内蔵不揮発性メモリ
130，1030，2030，3030，4030，5030，6030，7030，8030    内蔵揮発性メモリ
140，1040，2040，3040，4040，5040，6040，7040，8040    訂正アドレスレジスタ（訂正アドレス記憶手段）
150，1050，2050，3050，4050，5050，6050，7050，8050    訂正データレジスタ（訂正データ記憶手段）
160，1060，2060，3060，4060，5060，6060，6100，7060，8060    比較手段
170，1070，2070，3070，4070，5070，6070，7070，8070    比較結果記憶手段
180，1080，2080，3080，4080，5080，6080，7080，8080    データ変換手段
190，1090，2090，3090，4090，5090，6090，7090，8090    外部メモリ
1110，4110    空間判定手段
2110，4120，6130    フェッチ判定手段
1100，2100，3100，6110，7110，8110，8120    ２入力１出力アンドゲート
3110，5110    解読手段
4100    ３入力１出力アンドゲート
6120    復帰アドレスレジスタ（復帰アドレス記憶手段）
7100，8100    ＤＭＡＣ（ダイレクトメモリアクセス手段）
7120    インバータ
7130    ソースレジスタ
8130    オアゲート
8150    ソースアドレス設定条件記憶手段
B101，B1001，B2001，B3001，B4001，B5001，B6001，B7001，B8001    アドレスバス
B102，B1002，B2002，B3002，B4002，B5002，B6002，B7002，B8002    データバス
S103，S1003，S2003，S3003，S4003，S5003，S6003，S7003，S8003    訂正アドレス信号
S104，S1004，S2004，S3004，S4004，S5004，S6004，S7004，S8004    訂正データ信号
S105，S1005，S2005，S3005，S4005，S5005，S6005，S7005，S8005    一致信号
S106，S1006，S2006，S3006，S4006，S5006，S6006，S7006，S8006    一致状態保持信号
S107，S1007，S2007，S3007，S4007，S5007，S6007，S7007，S8007    訂正アドレス書込み信号
S108，S1008，S2008，S3008，S4008，S5008，S6008，S7008，S8008    訂正データ書込み信号
S109，S1009，S2009，S3009，S4009，S6017，S7009    リセット信号
B111，B1011，B2011，B3011，B4011，B5011，B6011，B7011，B8011    ＲＯＭバス
S112，S1012，S2012，S3012，S4012，S5012，S6012，S7012，S8012    リード信号
S113，S1013，S2013，S3013，S4013，S5013，S6013，S7013，S8013    ライト信号
S114    原リセット信号
S1015    内蔵不揮発性メモリ信号
S2014，S3014    セット信号
S2015，S6016    オペコードフェッチ信号
S3015    サブルーチン分岐信号
S4014，S8018    無効化信号
S4015    内蔵揮発性メモリ信号
S4016    オペランドフェッチ信号
S5009    サブルーチン復帰信号
S6009    復帰アドレス書込み信号
S6014    復帰アドレス信号
S6015    復帰アドレス一致信号
S7113，S8113    アクティブ信号
S7014    原ソースアドレス書込み信号
S7015，S8014    ソースアドレス書込み信号
S7016    反一致状態保持信号
S7017，S8019    起動信号
S8015    ソースアドレス設定条件信号
S8016    ＤＭＡ無効化信号
S8017    ソースアドレス設定条件保持信号
【図１】
2007026231.tif 000003
【図２】
2007026231.tif 000004
【図３】
2007026231.tif 000005
【図４】
2007026231.tif 000006
【図５】
2007026231.tif 000007
【図６】
2007026231.tif 000008
【図７】
2007026231.tif 000009
【図８】
2007026231.tif 000010
【図９】
2007026231.tif 000011