CPU実験室

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

Cコンパイラ

TI99/4AのエミュレータをインストールしたフォルダにTMS99XX用のCコンパイラもセットアップされているのに気づきました。
なんですが簡単なコマンドラインの説明があるだけで言語仕様については何の説明もありません。
 
イメージ 3
とりあえず簡単なCソースを書いてコンパイルすると一応、アセンブラソースが出力されるので結果を見ながらちょぼちょぼ解析しています
 
先ず関数のコール。
main関数から空のtest関数を呼ぶプログラムですが、アセンブラ出力は下段のような形です
 
イメージ 2
関数のコールにはR12でポイントされた処理へ分岐。
関数からのリターンはR13でポイントされた処理へ分岐というのはわかります。
ですがコール処理、リターン処理の実体とその処理の先頭アドレスをR12,R13にあらかじめセットしておかなければ全く使い物になりません。
 
一方、関数への引数と返り値の受け渡しはこんな感じ。
 
イメージ 1
 
R14がスタックポインタ、R8が返り値を格納するレジスタのようですが、やはりそのためにもスタックポインタの初期化等、前処理は必要なはずです。
 
ところで上のソース、最初は普通に
 main(int x)
と引数の型を括弧の中に書いたのですがどうしてもコンパイラがエラーになり通りません。
 
イメージ 4
なんとK&R作法なのですね
 main(x)
  int x;
 {
   ・・・・・・
 }
で通りました。
昔Cを始めたころにそういう書き方をしたことがある気もしますが、それ以来です