スパイス  組み込み制御装置の受注製作

Hitech-Cコンパイラを組み込み用に移植する
平成26年4月17日

CPM.EXE for Win32 コンパイル作業を半自動で行うためのmakefileを書いています。これが出来上がったら、プロジェクトの雛形として配布できるようにします。
 とはいえ、実際にプログラムをコンパイルするためにはソースファイルの追加や削除に伴うmakefileの変更が必要になりますので、これに関連して知っておくべき内容を先に書いていきます。
1.ファイル名の制約
 ソースファイル名はDOSの制約だけではなくCPMの制約も受けます。このため俗に言う8.3形式(ファイル名8文字まで、拡張子3文字まで)の制約に従う必要があります。
2.CPMのドライブ割り当てとDOSの階層ディレクトリの関係 CPMは階層ディレクトリをサポートしていないので、CPMからドライブを介して見えるのはDOSの特定のディレクトリになります。CPM.exeでは下記のように各ドライブにディレクトリが割り振られています。
A:   .. CP/M-80 プログラムディレクトリ(-a オプション時選択ドライブ)
B:   .. カレントディレクトリ (デフォルト選択ドライブ
C:   .. 第1,第2パラメタで指定された最初のディレクトリ(自動ドライブアサイン)または、環境変数 CPMC で指定されるディレクトリ
D:   .. 第1,第2パラメタで指定された2番目のディレクトリ(自動ドライブアサイン)または、環境変数 CPMD で指定されるディレクトリ
E:   .. 環境変数 CPME で指定されるディレクトリ
:  :
P:   .. 環境変数 CPMP で指定されるディレクトリ

 CPM.exeが動作している時には、Bドライブにカレントディレクトリが割り当てられており、通常のファイル操作はここが標準の作業場所になります。C, DドライブはCPMのコマンドに対する引数を調査して必要ならこのドライブにディレクトリを割り当ててくれます。ただし、調査の対象となるのは引数の左側二つに限定されています。非常に便利な機能ですが反面、気をつけないと引数の数が増えて調査対象から外れ、「ファイルがありません」というメッセージを受け取ることになります。CPMのプログラムを動かしている以上、CPMのドライブ割り当てを意識している必要があります。

 makefileを作る過程では、ドライブの割り当てを固定する必要があります。コンパイルに必要なディレクトリを決めて個々のディレクトリをドライブに割り当てます。以下のように決めました。
 まず、DOS側でのディレクトリからです。必要なディレクトリは下記になります。
ソースファイルのあるディレクトリ(ソースディレクトリ)
デバッグ用コンパイルを行うディレクトリ(デバッグディレクトリ、カレントディレクトリ)
製品用コンパイルを行うディレクトリ(製品ディレクトリ、カレントディレクトリ)
ワーク用ディレクトリ(ワークディレクトリ)
インクルードファイルのある(インクルードディレクトリ、複数可能)

 ワークディレクトリはCのソースファイルのコメント形式を”//”から”/* */”に変更するために使用します。
 配置はソースディレクトリを親ディレクトリとして、デバッグ、製品、ワークの各ディレクトリを置きます。

次はCPM側です。上記のディレクトリをそれぞれ下記のように割り当てます。
E:   .. ソースディレクトリ
F:   .. ワークディレクトリ
G:   .. インクルードディレクトリ(Gドライブ以降は複数設定可能)
デバッグ用、製品用のコンパイルディレクトリはカレントディレクトリになるのでBドライブに割り当てられています。
 これらのドライブ割り当て設定は環境変数”CPM<ドライブ文字>”を介してCPM.exeに伝達されます。環境変数を介しているおかげでドライブ設定をmakefileの中から比較的自由に変更できます。CPM.EXE for Win32の仕様は良く出来ています。

タイトル先頭へ 前へ 次へ タイトル末尾へ