CPU実験室

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

プログラムビルド

生成されるオブジェクトコードの構造、DOS管理下でのプログラムのロード、実行方法を
詳細に調べると勉強になるかも知れませんが、さすがに今さら感もあるのであまり深く考えず
簡単に専用ツールを使ってスタンドアロン化を実現してみます。
 
まずは改めてユーザプログラムのコンパイル
これでリロケータブルのオブジェクトファイルを生成します
 
イメージ 1
 
次にリンカでユーザプログラムにスタートアップルーチンや各種ライブラリをリンクしていきます。
 
重要なのはターゲット環境にないDOSのサービスを代替する支援モジュール群で
MSDOSのファンクションコールINT21Hや例外処理をトラップしてエミュレートする機能を含みます
これらは今回使用したロケータツールに付属のもので、言われるがまま機械的にリンクさせます。
 
自前で用意した286libはボード上のシリアルI/Fやタイマ、LED等の制御ライブラリ。
xprintfは本来のライブラリの中のprintf系関数がDOSのサービスを利用するためにリンクできないので
その代替ルーチンです。
 
イメージ 2
 
最後にMS/C付属の標準ライブラリをリンクしますが、オリジナルのものをそのままリンクしてしまうと
大量の二重定義エラーが発生します
 
イメージ 3
 
 
これはソフトウェアでDOSのサービスが必要な一部の関数をエミュレートしたモジュールとバッティング
しているためで逆に言うとこれらの関数がDOSのサービスを要請しているわけです
 
そのためMS/C付属のライブラリアンLIB.EXEで標準ライブラリからエラーが発生したモジュールを1個1個
削除していき、これをエラーが出なくなるまで繰り返すとROM化可能なライブラリが完成します。
(マニュアルが無いので、このやり方は間違ってるかもしれませんが)