Brainfuck言語で動くCPUを作る
皆様一度はCPUを作ってみたいなぁと思ったことがあるんじゃないでしょうか? 普通はそう思うと思います。一家に必ず一台オシロスコープが常備されていますか?そんなわけないでしょう、うちにはあるけど。 Brainfuckとはプログラミング言語の一種で、わずか8つの命令で構成されています。無限のメモリ、無限のテープを想定することでチューリング完全性を持つおそらく最小に近い言語です。 そこで私は考えを温めていました。Brainfuck言語で動くCPUを作ることができるのではないか。 特徴を以下に挙げます。 ・わずか8つの命令(3bitで表現可能) ・アドレスジャンプなど複雑な実装をしなくてもいい ・メモリの加算は+1のみであり、演算ユニットが非常に簡単になる ・RAMさえ用意すれば単純な構成ながら8-16ビット程度の大きな拡張が簡単にできる これらのロジックの簡素に加えて拡張性もあることから、ハードウェア実装が非常に容易になると思いました。 また、Brainfuck言語はその特徴的な簡素さから注目されており、多くのプログラミング例があります。 貧弱な計算能力から、数学的な問題を解く程度に過ぎませんが、ハノイの塔、素数計算から、複素数計算によるマンデルブロー集合まで実装されています。一部にはOS開発が行われています。 私は前からゲルマニウムトランジスタを所持しており、それによってBrainfuckのCPUロジックを作成し、マンデルブロー集合を計算させられないかと思っていました。 ロジックシミュレータであるLogisim-evolutionを用いて動作可能なBrainfuckCPUを作成しました。 そこの知見から、74シリーズのロジックICとRAMを使用してハードウェアロジックでのCPUを実現しました。この時はデコーダのタイミング計算が難しくてArduinoをデコーダ代わりとしました。(たいていの場合制御系の方が早くて複雑です) 動作できるハードウェアから逆算した結果、およそ400個のトランジスタで8ビットのCPUを構成可能であると見出したため、その実現に向けてプロジェクトを温めています。 一気にゲルマニウムトランジスタで実装するには大量の問題が出てきます。速度の遅さ(Ft=1MHz程度)、Tr節約のため、フリップフロップを2Tr構成としたいがかなりトリッキーな回路とタイミングに...