CPU実験室

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

モニタ作成

V50や386ボードに搭載したC言語で記述した高機能なモニタプログラムをTMS9995用のコンパイラコンパイル、できたバイナリを原始モニタでボードに転送して動作を確認しています。
x86用に対してデバイスの初期化、文字入出力の部分を変更するのみで移植は容易にできました。
 
イメージ 1
 
 
SRAMの先頭、0x8000番地からロードされるアプリケーションとして動作させ、各機能が問題なく動作するのが確認できたので、今度はこれをROMの先頭、0x0000番地からにリロケートしたバイナリを作り、ROMに焼き付ければ電源ONとともに最初から高機能モニタが起動する・・・・はずだったのですがどうもうまくいきません。
 
画面上の動きをみるとsprintfで文字列を画面に出力するのがダメなようです。
リンクしているSPRINTFモジュールのソースの一部はこんな具合です
 
 
イメージ 2
 
コードの中にBSS領域があるようです。DATA領域も初期化済埋め込みデータだけではなく変更される部分もあるのでこれはROMにアサインされたらダメですね。
 
本来、リンカがTEXT領域(Read Only)、DATA領域(Read Only)、、BSS領域(Read/Write)を各モジュールから集めて指定したアドレスへアサインするわけですが、今使っているTMS99用のリンカL99はそのセクションのリロケーション機能が無いようです。
もともとがTI99-4Aのユーザプログラム開発用でありコード全体がR/W可能なRAMにロードされることを想定しているためなのでしょうが、Cで開発したコードをROM化するのは結構大変そうです