「作りながら学ぶコンピュータアーキテクチャ」で設計しているCPUは本の中でPOCOと命名されています。これからしばらくPOCOの言語処理系を作ってみようと思います。
アセンブラがないと始まらないのでアセンブラの仕様から考えてみます。
アセンブルの前処理としては、includeとifdef-else-endif、名前を定義するequもしくはdefine。バイナリに変換されない処理としてはlabelのアドレス解決とcomment処理。そして命令のバイナリ変換です。
Verilogシミュレータはバイナリ変換されたROMデータを外部ファイルから読み込んで使います。FPGAボード上で実際に動作させる時はROMデータのVerilogコードを生成すれば良いと考えています。つまり入力からROMアドレスを与えられると固定のデータを出力から出すVerilogのソースコードでありCPUのVerilogソースコードと一緒にコンパイルされます。
ROMデータの他にアセンブラソースとROMデータの両方を載せたリストファイルも必要です。こう考えるとアセンブラだけでも結構やることが一杯ありますね。
アセンブラができたらマクロ位は作りたいな。Cライクの高級言語にもチャレンジしたいですが、CPUにあまり機能がないので作っても使わないかな。どこまでやるかはまだ分かりませんが色々と遊べそうです。楽しみ!