Polyphony Meets FORTH
blog
2019-7-31 2:01 JST

Polyphony で簡単に CPU を作る事が出来ます。RISC-V を作ったことは某所で発表済みなのでここでは FORTH 系の言語である RETRO の移植をしてみます。

RETRO ってなに?

Charles Childers さんが作っている FORTH 系の言語です。

RETRO is a modern, pragmatic Forth drawing influences from many sources.

FORTH との違いは入力したそばからすぐに解釈される(1文字入力するとすぐに解釈される)のと、.(ドット) では表示されずに putn(スタックトップの数字の表示)、puts(スタックトップをアドレスとする文字列の表示)と modern な香りがする言語設計になっています。

retro-language> ./retro
Retro 11.4 (2012.03.19)

ok 1
ok 2
ok +
ok .
. ?

ok putn 3
ok "abc"
ok puts abc
ok

Ngaro VM

FORTH系 の多くの言語がコンパクト/シンプルな VM を実行環境にとしてその上に複雑な FORTH 言語を構築しています。RETRO も Ngaro という VM の上で構築されています。換言すれば Ngaro VM が動けばどこでも RETRO は動くことになります。

注意点としては IO まわりでしょう。IO 周りはどうしても抽象的になってしまいます。その抽象性は構築される OS に依存するのでOS がないシステムの上で Ngaro VM を動かそうとすると多少厄介なことになります。最小限という意味では一文字入出力があればよいのですが、ファイルの入出力を考えるとファイルシステムが必要になるでしょう。

FPGA 上への移植

FPGA 上へ移植しようと思うと前述の通り"最小限という意味では一文字入出力"が必要になります。この部分は UART のタイミング制御が必要となるので一部 verilog で実現しました。詳しい移植のポイントや苦労話はまた別途書きます。まずはここまで。

リンク集