CPU実験室

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

Cコンパイラ

モニタでロードできるユーザプログラムをCで書けるようにしてみます。AnalogDevicesが提供しているツールの中にGCCベースのADSP21xx用CコンパラG21.EXEが含まれてました。

一般的な使い方ではこの程度のコマンドラインでいいようです。

f:id:O3I:20210717154343j:plain

自分のPC上のDOSBOX内で実行するために以下のバッチとしています

f:id:O3I:20210717154444j:plain

ここでオプション-runhdrで指定されるruntime headerですが常にプログラムの先頭にリンクされてプログラム走行環境の初期化やユーザプログラム本体main()を呼び出すためのスタートアップルーチンになります。

もともと添付されている雛型はこのような内容です。

f:id:O3I:20210717154509j:plain

これはプログラム空間の0番地からロードされることを前提にしていて、0番地のコールドスタート、4番地以降に各種割込みベクタが並んでいますが、このプログラムは800番地からロードされるのでベクタテーブルは必要ありません(モニタ側に入れておくべきだった)

要らない部分を削って先頭アドレスを800番地にしたものが以下です

f:id:O3I:20210717154523j:plain

この部分だけ予めアセンブルして2101_hdr.objにしておきます

asm21 2101_hdr.dsp -c 

このときアセンブラコマンドライン-ccase sensitive:大文字小文字を区別する)指定しておかなければなりません。最初これを指定しなかったところ内部のライブラリやユーザプログラムmain()がリンクできないというエラーが出て嵌まりました。

・・そのときはユーザプログラムのメイン関数をMAIN()と大文字にしたらリンクできたのですが、対策方法と矛盾しているような?