gombeのブログ

マイコンの電子工作系PIC32/KiCad/C/C++/3D/

あけおめことよろ 新規プロジェクトの紹介

あけましておめでとう🌅⛩🎍

今年もよろしくお願いします。

最近新しいプロジェクトを始めました。MachiKaniaのハードでCコンパイラテキストエディタなどを乗せたネイティブコンパイラの開発をしています。

このシステムは編集、コンパイルや実行に必要な一通りのアプリケーションを搭載しています。ここで一連のフローを示します。

1、プログラム(.c)を作成

2、コンパイルする(.c→.s)

このコンパイルアセンブリリストを生成します。(.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

操作はキーボードに移しました。

ソースコード

Hackadayにも載せました