マイコンを作りたい!

2022-09-23

\[ \newcommand{dn}[3]{\frac{\mathrm{d}^{#3} #1}{\mathrm{d} #2^{#3}}} \newcommand{\d}[2]{\frac{\mathrm{d} #1}{\mathrm{d} #2}} \newcommand{\dd}[2]{\frac{\mathrm{d}^2 #1}{\mathrm{d} {#2}^2}} \newcommand{\ddd}[2]{\frac{\mathrm{d}^3 #1}{\mathrm{d} {#2}^3}} \newcommand{\pdn}[3]{\frac{\partial^{#3} #1}{\partial {#2}^{#3}}} \newcommand{\pd}[2]{\frac{\partial #1}{\partial #2}} \newcommand{\pdd}[2]{\frac{\partial^2 #1}{\partial {#2}^2}} \newcommand{\pddd}[2]{\frac{\partial^3 #1}{\partial {#2}^3}} \newcommand{\p}{\partial} \newcommand{\D}[2]{\frac{\mathrm{D} #1}{\mathrm{D} #2}} \newcommand{\Re}{\mathrm{Re}} \newcommand{\Im}{\mathrm{Im}} \newcommand{\bra}[1]{\left\langle #1 \right|} \newcommand{\ket}[1]{\left|#1 \right\rangle} \newcommand{\braket}[2]{\left\langle #1 \middle|#2 \right\rangle} \newcommand{\inner}[2]{\left\langle #1 ,#2 \right\rangle} \newcommand{\l}{\left} \newcommand{\m}{\middle} \newcommand{\r}{\right} \newcommand{\f}[2]{\frac{#1}{#2}} \newcommand{\eps}{\varepsilon} \newcommand{\ra}{\rightarrow} \newcommand{\F}{\mathcal{F}} \newcommand{\L}{\mathcal{L}} \newcommand{\t}{\quad} \newcommand{\intinf}{\int_{-\infty}^{+\infty}} \newcommand{\R}{\mathcal{R}} \newcommand{\C}{\mathcal{C}} \newcommand{\Z}{\mathcal{Z}} \newcommand{\bm}[1]{\boldsymbol{#1}} \]

MFT2022、お疲れ様でした。 リレーコンピュータを構想してから 5 年、なんとか完成することができました。 ということで、ようやくトランジスタ縛りから開放されたので、トランジスタで CPU を作って、OS を動かしていきます。 来年の MFT2023 に出せたらいいな…?

目標・野望

ロマンと実用性の両立!楽しい!感動できる!

1. ロジック IC で作る

できるだけスルーホールのロジック IC を使って作る。

2. 全部自作。

回路から、アセンブラ、コンパイラ、OS を全て手作り。

3. 実用性

いろいろ遊べる。機能がたくさん。

4. 柔軟な開発

リレーコンピュータが5年もかかったのは、何回か大幅な設計変更をしたから。 だいぶ寄り道してたのもあるけど。 回路基板を実装した後に設計変更するのはかなり萎える。

今回のマイコン開発ではエミュレータとFPGAを使って†アジャイル開発†する。 たとえば、OSを作る中でCPUの仕様を変えたくなったらエミュレータを書き換える。 最終的に仕様が決まってからロジックICとして実装する。

作るもの

CPU

RISC-V っぽい CPU。

アセンブラ

アセンブリと機械語を一対一に変換するだではなく、変数・定数にラベルを割り当てて、生でアセンブリを書く負担を減らします。

コンパイラ

C言語っぽい高級言語を自作して、そのコンパイラを作ります。

エミュレータ

機械語コードを読んで CPU をエミュレートします。

OS

リアルタイム OS を作ります。

ハードウェア

ロジック IC で CPU を組みます。

ライタ

パソコンから ROM に機械語コードを書き込みます。

将来的に作りたいもの

LLVM バックエンド

LLVM 神「力が…欲しいか…」

LLVM の力を借りて、C 言語が完全にサポートされたコンパイラを作ります。

デバッガ

パソコン側から、ステップ実行したり、ROM の値を読んだりできるようにします。

開発環境

VSCode の拡張機能として、フォーマッタ、シンタックスハイライトを実装します。 VSCode のデバッガインターフェースを使って実行&デバッグできるようにします。

開発フロー