エミュレータとは
エミュレータ (英: emulator) とは、あるハードウェアやソフトウェアの動作をemulate (まねる・模倣する) するソフトウェアやハードウェアのことです。
エミュレータの使用用途
一般的にもよく使用されるエミュレータの例としては、Windows OSのパソコン上でスマホのAndroid OSのアプリを実行するような場合に必要となるソフトウェアエミュレータがあります。
ハードウェアエミュレータとしては、例えばマイコン搭載の機器のプログラム開発のデバッグに用いられるエミュレータがあります。
エミュレータの原理
コンピュータのハードウェアとソフトウェアは別物のように見えますが、実際には同じ内容をハードウェアで実行するかソフトウェアで実行するかの違いです。
ビジュアルプログラミング言語や高級言語で作られたプログラムも、ハードウェアで実行するため最終的には0と1で表現されるマシン語に変換されます。一方、0と1のみしか扱えないハードウェアの内部の回路の全てはド・モルガンの法則を実現する論理演算回路で構成されており、数値演算も全て同じ回路で処理されます。
つまり、ソフトウェアとハードウェアのどちらも0と1の論理演算を組み合わせた処理を違う実現方法で行われるということです。これはコンピュータに接続された周辺デバイスも同様で、全てのデジタル技術の基礎となっています。
エミュレータの種類
1. ソフトウェアエミュレータ
Windows OS上でAndroid OSのアプリを実行したいという場合、どちらのOSでも動作するような高級言語で開発されたソフトウェアは両者で実行が可能です。しかし、どちらか一方のアプリ開発環境の上で開発された場合はもう一方のOSで正常に動作しない可能性があります。
このような場合、例えばAndroid OSでのアプリとWindows OSの間をエミュレータソフトで補完することで正常な動作が可能になりますが、エミュレータソフトを介して実行するため動作速度は低下します。
別の例としては、同じOS上でも異なるブラウザー間を繋ぐエミュレータソフトもあります。例えばInternet Explorer向けに作成されているページをEdgeで閲覧するような場合に用いられます。この場合もエミュレータのプログラム処理を介するため動作速度が低下します。
2. ハードウェアエミュレータ
マイコン搭載機器向けのソフトウェア開発に用いられるハードウェアエミュレータの一つとしてICE (英: In Circuit Emulator) があります。ICEは米Intel社の登録商標ですが、他社製品もICEと呼ばれることがあります。
ソフトのデバッグ時は、マイコンや周辺デバイス内部の状態を確認しながら進める必要がありますが、通常のマイコンの内部状態は外部端子からはほとんど知ることができません。このためマイコンと同じ動作をしながら内部状態を外部に出力する端子を設けたエミュレーションチップを作り、マイコンと置き換えたハードウェアがICEです。
ICEではマイコン内部のメモリをトレースする外部メモリを接続したり、プログラムの実行を任意のポイントで停止 (ブレーク) させて内部状態を確認するブレークポイントを設定する等のことができます。
3. その他のハードウェアエミュレータ
ハードウェアエミュレータとしては組み込みソフトのデバッグの他に、故障等で使えなくなったコンピュータ上で動作するソフトウェアを実行したいといった用途向けのものもあります。
エミュレータのその他情報
1. ICE使用時のポイント
ICEの機能を使いこなすにはハードウェアをステップ毎に直接的に動かすようなプログラムが必要なため、マイコン制御向けのソフト開発現場ではC言語が主に用いられます。
より高級な言語の方がプログラム開発が容易でプログラムも短くなりますが、実際にマイコンROMに書き込まれる時にはC言語によるプログラムの方がコードサイズが小さくなります。
これはC言語がアセンブラに近いレベルで記述することが可能なためで、これによりROM容量を抑え、ステップが少なくなることでリアルタイム性が向上し、周辺ハードの精密な制御が可能です。
2. ハード/ソフト混載のエミュレータ
エミュレータの原理に従えば、ハードウェアとソフトウェアの両者によるハイブリッドなエミュレータの実現も可能です。例えば、コンピュータ全体を模倣するハイブリッドなエミュレータ上で新規開発中のOSを動かしてデバッグすることができます。