≪Cortex-M0シミュレータ≫

●はじめに

　Cortex-M0シミュレータを作ろうと思ったきっかけは，Cortex-M0がRISC-Vに対して，どの位単純なのだろうと思ったことです，ご存知のようにCortex-M0のアーキテクチャであるArmv6-Mは，Armアーキテクチャの中では，もっとも単純なアーキテクチャです．もし，Armv6-MがRISC-V位単純であれば，命令デコーダを差し替えるだけで簡単にCortex-M0の命令セット・シミュレータが作成できると思ったのです．

●おもったより複雑

　Cortex-M0のシミュレータを作り始めてすぐに気づいたのが，Armv6-Mアーキテクチャの複雑さです．命令エンコーディングが結構複雑です．「これが，Armなのか…」と改めて思い知らされました．やはり，Armは6502を手本としているだけあってCISC的な命令が目立ちます．Armのネイティブ（Armv7-A）よりは簡略化されていて，条件実行がないのは救いなのですが，複数レジスタのロード/ストア命令などは（デコードはともかく）命令実行が特殊にならざるを得ません．本連載の最初のターゲットにRISC-Vを選んだのは強運でした．

●とはいえ，条件フラグ以外はそれなり

　Armの特徴として，条件フラグの存在があります．RISCといえば，条件フラグを削除したアーキテクチャという考えでいましたから，条件フラグがあるArmはRISCとCISCの中間のようなアーキテクチャだと追っています．条件フラグを除けば，Cortex-M0とRISC-Vの圧倒的な違いといえば，命令数が，Cortex-M0の方が多いということでしょう．命令デコーダ部と命令実行部もその影響を受けて，RISC-Vの約3倍になっています．ここは，Cortex-M0が複雑というよりは，RISC-Vが超絶単純だったというべきでしょう．
　今回，RISC-VとCortex-M0以外に，MIPS，SH-2，V850，Cortex-A7，Cortex-A53のシミュレータを作りましたが，どれもRISC-Vよりは複雑なアーキテクチャです．SH-2がやや単純というところでしょうか？

●ということで

　Cortex-M0のシミュレータを作ってみました．どうせならCortex-M3のシミュレータを作れよと言われそうですが，そこは読者の自習にまかせます．Cortex-M0のシミュレータをCortex-M3に拡張するには，IT命令の実装がキーポイントでしょうか？ITブロックの中では条件フラグが影響されないという仕様があるので，それをどう実現するかが腕の見せ所です．
