あけましておめでとう🌅⛩🎍
今年もよろしくお願いします。
最近新しいプロジェクトを始めました。MachiKaniaのハードでCコンパイラやテキストエディタなどを乗せたネイティブコンパイラの開発をしています。
このシステムは編集、コンパイルや実行に必要な一通りのアプリケーションを搭載しています。ここで一連のフローを示します。
1、プログラム(.c)を作成
2、コンパイルする(.c→.s)
3、アセンブリする。(.s→.o)
2、3はすべてのソースコードに対して行います。
4、リンクする(全ての.o→実行ファイル)
5、実行(a.outフォーマットローダを使う。実行に関して、ここで解説しています)
.text
実行コードが入ります。静的です。
.data
0以外の初期値を持つデータ(変数)がここに入ります。静的です。
.bss
0に初期化するデータ(変数)がここに入ります。実行前に初期化します。静的です。この領域はa.outフォーマットの中には入りません。dataのサイズを減らすためのセクションです。
.heap
heapに使います。下に向かって伸びます。動的に変わります。
stack
stackに使います。上に向かって伸びます。動的に変わります。
このstackを使い果たすとstackオーバーフローとなり、heapを侵食します。MMU(memory management unit)があればいろんなことできそうなんですがね、、まあないものはしょうがないです。
RetroBSDでは128kのRAMを搭載しているので様々なアプリをRAMで実行できるのですが、今回のプロジェクトは64kBをターゲットとしているので結構厳しいです。コンパイル時はFlashで実行します。(つまりシステムにビルドインする)動作も50MHz付近なのでshもFlashで動かす予定です。(スワップ実装するのも大変だから、、)
ファイルシステムもFatファイルシステムにしました(FatFS)。内蔵Flashのストレージも作ってます。(80kBだけど減るかも、、それと大きいものコンパイルするときはアセンブリリストが長くなり、容量足りなくなるから、そういう場合はSDカード用意してね)
ってことで現在テトリスまで動きました。本家のソースコードはほとんどいじってません。(PS2キーボード化と、乱数を実装と音声部削除)コンパイルはオフスクリーンで3秒位です。RAMは13kBくらいしか使っていないので残り45KBもあります。音声など実装できると思います。Tスピンなどもできるかもしれません。ハードドロップ、ホールドも欲しいなぁ。
http://www.ze.em-net.ne.jp/~kenken/tetris/index.html
操作はキーボードに移しました。