-

Operating Details

提供: HI-TECH C for CP/M Fan WIKI(JP)
移動先: 案内検索

操作の詳細

HI-TECH Cは簡単に使えるようにデザインされています。単体のコマンドでプログラムをコンパイル、アセンブル、リンクできます。Cコマンドの書式は以下の通りです。

C [ options ] files [ libraries ]

optionsはゼロもしくはそれ以上のオプションで、どれもダッシュ('-')と一文字のキーレターと、(必要に応じて)キーレターからスペースなしで続く引数で構成されます。filesはは一つ、もしくはそれ以上のC言語のソースファイル、アセンブラのソースファイル、もしくはオブジェクトファイルです。librariesはゼロ、もしくはそれ以上のライブラリ名、もしくはlibname.libに展開される、-lnameで省略された名前です。

Cコマンドは特定のオプションで定義されたように、与えられたCファイルをコンパイルし、それらをアセンブルして、要求されることなくオブジェクトコードにします。そうでなければ指定されたアセンブラソースファイルをアセンブルし、アセンブルの結果を他のオブジェクトや指定されたライブラリとリンクします??。

Cコマンドが引数無しで起動されると、入力のためにコマンドラインにプロンプトを表示します。このコマンドラインはバックスラッシュ('\')を行末でタイプすることで拡張できます。コマンドの標準入力がファイルから(例えばC < afileのように)なされた場合、コマンドラインはそのファイルから読み込みます。ファイルの中では一行以上が与えられるかもしれませんが、どの行も最後の行にはバックスラッシュが付きます。このメカニズムはMS-DOSバッチファイルでは働かないことに注意してください。つまり、Cコマンド用のコマンドファイルは別のファイルでなければいけません。MS-DOSは長いコマンドラインやバッチファイルの中から標準入力するメカニズムを持っています。

Cコマンドで認識されるオプションは以下の通りです。

-S
アセンブラ出力としてC言語ファイルのコンパイル結果を残します。Cソースコードはアセンブラコードの間に点在するコメントになります。
-C
全てのコンパイルとアセンブルの結果をオブジェクトファイルのままにします。リンカは起動させないでください。これによりリンカを個別に、もしくはもしくはもっと後のステージでCコマンドを介して起動させることができます。
-CR
クロスリファレンスリストを生成します。-CRは生の参照情報をテンポラリファイルに残し、ユーザーにCREFを明確に実行させます。生の情報を特定のファイル入れるため、例えば-CRFRED.CRFのようにファイル名を与えると、この場合ではFRED.CRF.がCREFに処理されます??


-CPM[1]
-O
オプティマイザをすべてのコンパイルコードに対して起動します。これはアセンブラに対してjump最適化も要求します。
-OOUTFILE
実行ファイルが作成されるように名前を指定します。デフォルトの実行ファイル名は、コンパイラに指定された最初のソース、もしくはオブジェクトファイルから派生します。このオプションはデフォルトを上書きできます。もしドット('.')が、与えられたファイル名にない場合、拡張子は特定のオペレーティングシステムに応じて付加されます。[2]
クロスコンパイラでは、特定の出力フォーマットを指定する方法を提供する方法となります。つまり、出力ファイルPROG.BINはバイナリファイルを、一方で、PROG.HEXは16進数のファイルを生成させることになります。
-V
冗長化します。コンパイルのどのステップも、実行しているままにechoします。


-I
#include用に検索対象のファイルを追加するプレフィックス指定をします。CP/Mではデフォルトのプレフィックスは0:A:(ユーザー番号0、ディスクドライブA)です。[3]


-D
シンボルをプリプロセッサに定義します。例えば-DCPMはシンボルCPMは#define CPM 1を介して定義します??
-U
事前定義されているシンボルの定義を解除します。-Dの補足です。
-F
リンカにデバッガと使用するためのシンボルファイルを生成するように要求します。
-R
Z80 CP/Mコンパイラ用にだけ、このオプションはリンク時に??コマンドラインI/Oリダイレクションとファイル名のワイルドカード拡張をします??リダイレクションの書式に関しては付録5の_getargs()を参照してください。
-X
コンパイル、アセンブル、リンクされたファイルからローカルシンボルファイルを切り出します。グローバルシンボルのみが残ります。
-M
リンクマップを生成するようリンカに要求します。
-A
このオプションはZ80専用で、プログラムの実行時に自分自身をTPA(Transient Program Area)のトップに再配置するプログラムを生成するよう、コンパイラに命令します。このオプションは、それの後に他のプログラムが実行できるようなプログラムを書くことを許容します。このようにして書かれたプログラムは、自分自身を、守るためにbdosのロケーション6のアドレスに自動的にリセットしません。これはプログラム自身がやらなければなりません。
クロスコンパイラではリンカに対して、コンパイルされるプログラムがどこのアドレスでリンクされるかを指定する方法があります。そのオプションが -AROMADR,RAMADR,RAMSIZEです。ROMADRはシステムのROMのアドレスで、実行可能なデータや初期化データが置かれます。RAMADRはRAMの開始アドレスで、BSS PSECTなど、初期化されないデータが置かれます。RAMSIZEはプログラムが取ることのできるRAMのサイズで、スタックのトップがセットされます。

[4]

[5]


-B[6]


-E[7]


-W
このオプションはワーニングレベルを設定します。つまり、コンパイラがルールにのっとっているか、型の変換は怪しくないか、などについてどれくらい几帳面になるか決定します??-W0は全てのメッセージを許容します(デフォルト)、-W1は"Func() declared implicit int"のメッセージを抑制します。-W3はもともとは、より厳格でない他のコンパイラで書かれたコードをコンパイルするときにお勧めです。-W9は全てのワーニングメッセージを抑制します。


-H
このオプションははデバッガと共に使うためのシンボルファイルを生成します。シンボルファイルのフォーマットはどこかに書かれるでしょう。シンボルファイル名のデフォルトはl.symです。違う名前は -Hsymfile.abcのようなオプションで指定されます。
-G
-Gも-Hのようにシンボルファイルを生成しますが、ソースレベルデバッガ用に行とファイル番号情報を含むものです。-Hのように、ファイル名は指定できます。-Oと共に連結して使われた場合、デバッガが混乱しないように、部分的な最適化が実行されます。
-P[8]


-Z[9]
-1[10]
-2[11]
-11[12]
-6301[13]
Cコマンドのサンプルをいくつか挙げます。
c prog.c
c -mlink.map prog.c x.obj -lx
c -S prog.c
c -O -C -CRprog.crf prog.c prog2.c

[14]

上記の例では、大文字、小文字は強調されています??コンピューター上では大文字小文字の区別はされませんが、名前を指定する引数、例えば-Dでは本質的に大文字小文字の区別をします。

上記の例を順に取り上げます。最初の例はCソースファイルのprog.cをコンパイルし、標準Cライブラリとリンクします。二番目の例はprog.cファイルをコンパイルし、オブジェクトファイルx.objとライブラリlibx.libをリンクします。リンクマップはlink.mapに書き出されます。

三番目の例はprog.cをコンパイルし、アセンブラ出力をprog.asに残します。これはファイルをアセンブルせず、またリンカも呼び出しません。次の例はprog.cとprog2.cの両方をコンパイルし、両方でオプティマイザを呼び出しますが、リンクはしません。クロスリファレンスリストはprog.crfに残ります。

[15]

一つ以上のCもしくはアセンブラのソースファイルがCコマンドに与えられた場合、それぞれのファイル名が処理されている順にコンソールに表示されます。もし、ソースのコンパイル中やアセンブル中に、致命的なエラーが起きた場合は、その後の処理は行われますが、リンカは起動されません。

Cコマンドが自動的に行うよりもむしろユーザーによって発行される他のコマンドは以下の通りです。

ZAS
Z80アセンブラ

[16]

LINK
リンカ
LIBR
ライブラリアン
OBJTOHEX
オブジェクトから16進データへのコンバータ
CREF
クロスリファレンスジェネレータ

一般的にこれらのコマンドはCコマンドと同種のコマンドラインを受け付けます。つまり、ゼロ、もしくはそれ以上のオプション('-'が先につく)をとり、そのあとに一つかそれ以上のファイル引数が付きます。リンカやライブラリアンが引数とともに起動された時、コマンドラインのプロンプトを表示します。これにより、128バイトを超えるコマンドラインの入力が可能です。入力はリダイレクションによりファイルからも可能です(ライブラリ関数一覧の_getargs()を参照)。

Cコマンドについては上記を参照してください。このコマンドの詳細はこの後のマニュアルでも記述されています。

HI-TECH C for CP/M v3.09以外の記述のため省略

  1. これはZ80クロスコンパイラ用のみで、CP/M-80のCOMファイルを生成します。-CPMオプションが無ければ、Z80クロスコンパイラはROMランタイムスタートオフモジュールを使用し、hexもしくはバイナリイメージを生成します。-CPMオプションが与えられると、CP/M-80ランタイムスタートオフコードがリンクされ、CP/M-80のCOMファイルが生成されます。
  2. 例えば-OFREDは、MS-DOSではFRED.EXE、CP/M-86ではFRED.CMDとなります。
  3. MS-DOSのデフォルトプレフィクスはA:\HITECH\です。UnixやXenixではデフォルトプレフィックスは/usr/hitech/include/です。MS-DOSではディレクトリ名の最後にバックスラッシュをつけて-Iの引数として与える必要があります。-I\FREDではなく-I\FRED\のようにします。Unixでは最後に/を付ける必要があります。
  4. 6801/6301/68HC11コンパイラでは、-Aオプションが4番目の数値を取り、ctempと呼ばれる4バイトダイレクトページエリアのアドレスが、スクラッチパッドとしてコードにコンパイルされます??もしctempアドレスが-Aオプションから省略された場合、デフォルトは0になります。普通はこれが許容されますが、6801の変種(6303のような)は、メモリマップトI/Oポートをアドレス0に、ダイレクトページRAMをアドレス$80に持ちます。
  5. 8051コンパイラのlargeメモリモデル用に-Aオプションは-AROMADR,INTRAM,EXTRAM,EXTSIZEのような形式を取ります。ROMADRはシステム内のROMです。INTRAMは内部RAMのスタートアドレスです。RBSS PSECTが置かれます。8051内部スタックはRBSS PSECTの末尾から始まります。EXTRAMは外部RAMのスタートアドレスです。BSS PSECTが置かれます。EXTSIZEはプログラム内が取れる外部RAMのスタートアドレスです。外部スタックのトップに置かれます。
  6. 1つ以上の"メモリモデル"をサポートしているコンパイラ用に、どのメモリモデル用のコードを生成するか選択するためにこのオプションが使われます。-Bxのオプションのxは、使用するメモリモデルを指定する1つかそれ以上の文字です。8086用では、このオプションは5つのメモリモデル(Tiny, Small, Medium, Compact, Large)が選択できます。 8051用コンパイラでは、3つの(Small, Medium, Large)メモリモデルが選択できます。8051専用で、このオプションはまた、-Bオプションの最後にAをつけることでauto変数のスタティック配置ができます。例えば、-Bsaはsmallモデルを選択すると共に全ての変数をスタティック配置しますが、-Bmはmediumモデルを選択すると共にスタティックにauto変数をダイナミックに配置します。
  7. デフォルトでは8086コンパイラは実行時に64kデータセグメントを要求するため?実行ファイルのヘッダを初期化します。これは-Eオプションでオーバーライドが可能です。これは起動時にプログラムに配置される(パラグラフでない)数BYTEの引数を(普通は16進数表現で)取ります。例えば-E0ffff0hはメガバイトをリクエストします。オペレーティングシステムが可能な限り以上はできません??
  8. 実行プロファイルはDOS、CP/M-86、Atari STのネイティブコンパイラで使用可能です。このオプションはプログラム実行時にプロファイリングを実行します。-HオプションはEPROFプロファイラー用シンボルテーブルを提供する時にも指定されなければなりません。
  9. バージョン5.xxのコンパイラ専用です。-Zオプションがコード生成のグローバル最適化を使用するために使われます???8086,6801/6301/68HC11コンパイラで有効な-Zオプションは-Zgのみです。8051コンパイラでは-Zオプションはグローバル最適化をする-Zgとスペースの最適化をする-Zsオプション、そしてスピードの最適化をする-Zfが有効です。sやfのオプションはfオプションと使われますので-Zgfや-Zgsが有効です。スピードやスペース最適化はとても排他的です。つまり、sとfのオプションは一緒には使えません。
  10. 8086コンパイラ専用です。80186プロセッサの拡張命令の優位なコードを生成する要求をします。-1オプションとともにコンパイルされたプログラムは8086や8088プロセッサでは実行できません。68000コンパイラでは68010プロセッサ用の命令を生成します。
  11. -1と同様ですが、80286と68020用です。
  12. 6801/HCコンパイラ用です。このオプションは68HC11用の命令を生成するために使用します。
  13. 6801/HC11コンパイラ用です。このオプションは6301/6303プロセッサ用の命令を生成するために使用します。
  14. c -v -Oxfile.exe afile.obj anfile.c -lf
  15. 最後の例はコンパイラの8086版で使います??これはコンパイラをvorboseオプションで走らせ、anfile.cを最適化せずオブジェクトコードanfile.objにコンパイルし、anfile.objは浮動小数点ライブラリ(-LFオプションで)と標準ライブラリをリンクし、実行プログラムxfile.exeを生成します(これはMS-DOSシステムでの実行を仮定しています)。浮動小数点を使用したい方のいるかと思いますが、その際には-LFオプションが必要です。
  16. AS86 8086アセンブラ