CPU実験室

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

割込みC言語化

割込みプログラムをCで書いてみました。
 割込みサービスルーチンをベクタで示される特定アドレスに配置することはCではできないのでリンカに対して指示を与えることになります。
コンパイラのマニュアルを読んで見ると、なるほどこういう指定がちゃんとありますね、と
 
イメージ 2
 
ところがこのプラグマを挿入しても思うように関数の配置ができず、かといってエラーも起きず全く無視されてしまいます。
何をやってもダメで悩んだ挙句少し版の古いマニュアルをみてみると・・・・
 
イメージ 3
 
 
えーっ? プラグマによるセクション指示は途中から拡張された機能のようです。
しかたがないのでインラインアセンブラ文で無理やり関数の前にSECTION指示を挿入。
 
イメージ 1
 
これも最初はアセンブラ文字列のタブ:”¥t”を入れ忘れてコンパイルは正常終了するのにアセンブルでわけのわからないエラーが出て嵌まりました。
アセンブラの第1カラムはラベルか空白かコメントの「*」じゃないとダメで、タブを入れ忘れるとラベル2重定義エラーとか怒られてしまいます。