CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

CMOCコンパイラ

このCMOCはなかなかのスグレモノでCのサブセットとは謙遜していますが、サポートしてない点、C99規格との相違点も明記されていて通常の使い方では全く問題がありません。C標準ライブラリも必要最小限しかサポートしないとしていますがstr~mem~のストリング系関数の他、printf系関数もあるので組込み用途には充分です。

 

自前のLCD制御関数を含む簡単なプログラムを書いてみました。

f:id:O3I:20210212134232j:plain

 

これも問題なく動作しています

f:id:O3I:20210212134433j:plain

 

フルサポートしていないのは実数演算くらいでしょう。

FLOATDOUBLE型変数はコンパイラは受け付けますが演算の実体は本来のターゲットであるCoCoDISK-BASICのROM内ルーチンを使うとされています。

 

f:id:O3I:20210212134507j:plain

上のソースコードコンパイル、リンクはノーエラーで完了しますがボード上で実行させると当然のことながら必ず暴走します。リスティングファイルを見ると、確かに変数をスタックに積むところまではやっていますが加算のためにaddsinglesingleという外部ルーチンを実アドレスで呼んでいるのが判ります。

f:id:O3I:20210212141308j:plain