前回までのあらすじ
- 自作PCを作ろう!
- まずメモリを作ったよ!
- ISAを作ったよ!
- アセンブリ言語を作ったよ!
- CPUを作ったよ!
- 任意のプログラムを実行できるようになったよ!
- キーボード入力を受け付けられるようになったよ!(ただし独力ではない)
- 複数桁+複数桁の足し算が行えるようになったよ!
-
CALL命令とRET命令を実装して,関数呼び出しが可能になったよ! - 自作CPU上で動作する自作プログラミング言語をコンパイルするコンパイラを作ったよ!
- 上記コンパイラで,プログラミング言語から機械語への一気通貫が可能になったよ!
- gitで開発環境を整えたよ!
今回の目標
いつまでコンパイラ作ってんだよって話ですが,OSを作る上でまだPynesis(自作CPU上で動作する自作プログラミング言語)に足りないものがあるので色々実走していきます.
ここから本題
マシンに保存できる命令の数を増やす
今まで,CPUで実行できる機械語の最大数は255でした.
しかし,lsなどいろいろな命令を実装する上では少なすぎるので拡充しました.
これはハードウェア上に制約があったわけではなく,単にコンパイラやアセンブラで255命令までの制限があったってだけなので,それを撤廃しました.
とりあえずしばらくは十分な数であろう4096にしました.
この数字には「しばらくの間はこれだけあれば十分だろう」というだけじゃなく,現在のROM読み出し回路が組み合わせ回路になっておりLUT資源を消費するため,PYNQ-Z2に存在するLUT資源を消費し切らない安全な値として設定しています.
構造体に対応する
Pynesis(自作CPU上で動く自作プログラミング言語)の話です.
C言語では構造体を使ってファイル操作を行いますが,クラスもなければ構造体もないPynesisではファイル操作に対応するのが非常に面倒くさい.
という事で構造体に対応しました.
構造体の配列に対応する
これは,構造体のメンバ変数として配列を用意する話ではありません.
構造体自体を並べた配列に対応するという話です.
複数ファイルに対応するためには必要になる…というほどの温度感ではないですが,あった方が便利という事で対応しました.
組み込みの文字列操作関数を用意する
現在,組み込みの文字列操作関数が用意されていません.
そのため,入力されたコマンドがlsと等しいかどうかとか,文字列のコピーとか,そういうことをしようとすると逐一文字列操作関数を自作しなければなりません.
まあできなくはないんですが,普通に面倒くさいので組み込み関数が欲しいですよね.
という事で作りました.
ソース
ソースをコピペするのが面倒くさいのでこれ見てください.
今後の展望
やっとOS作成できるんですかね?
ずっとOS作る作るって言っておきながらずっとそのための変更ばかりしているんですが.