C言語環境セットアップ


必要なものを揃える

 まずは環境のセットアップです。必要なものを揃えましょう。

・Cコンパイラ
 X680x0上で動くコンパイラは「GNU C」「XC」の二種類存在します。 が、SFXVIキャラクタの開発には「XC」は使えませんので「GNU C」(以下GCC)を用意する必要があります。 XCが使えたとしても生成されるコードの質を考えれば、自ずとGCCを使うことになります。

 GCCの入手方法ですが、ソフトバンク刊「X680x0 Develop」を購入するのが確実かと思 われます。なお、私が使用しているコンパイラのバージョンは gcc version 1.16 Tool#1(X68) Based on 1.42です。

・インクルードファイル&ライブラリ
 これらには「XC」「libc」が存在します。 SFXVIキャラ開発には必要ない場合もありますが、用意しておいた方がいいでしょう。

 XCライブラリにはX680x0のハードをいじる関数なども含まれており、 若干高速なためゲーム開発向けといえます。
 libcはUNIXとの互換性などのため、高機能な関数がそろっています。 その分サイズや実行速度の点においてはXCに劣る場合もあります。 また、ハードを直接いじるような関数も用意されていません。

 というわけで、これらは用途に応じて使い分けるのがいいでしょう。 SFXVIキャラ制作に使うのであればXCの方がいいかもしれません。

 XCはシャープのCコンパイラに付属しています。libcはソフトバンク刊「X680x0 libc」 で入手出来ます。なお、私の使用しているものはXC2.0に付属のものです。

・アセンブラ&リンカ
 アセンブラはハイスピードアセンブラ「HAS」を用意するのがいいでしょう。 同様にリンカはハイスピードリンカ「HLK」を使いましょう。 純正品でも、機能的には大差ありませんが、スピードが違いますからね。

 HAS、HLKは通信上で手に入れることが出来るほか、「X680x0 Develop」などの書籍で も入手することが出来ます。

 参考として、私の使用しているバージョンを下に
HAS:v3.08
HLK:v2.28
・テキストエディタ
 これはまあ、普段使っているテキストエディタで十分でしょう。 ただ、複数のファイルを編集出来ないエディタ(あるんですか?)を使っているなら、 別のものに乗り換えましょう。私はSuperEDを愛用しています。なお、バージョンは v1.18です。

 SuperEDで、C言語プログラムを作成する時に設定しておくと便利なコマンドラインオプションは、
タブ記号:/T{表示スイッチ},{色},{サイズ}
カーソル移動:/X{桁位置記憶モード},{オートインデント}
この二つです。4タブ、オートインデントモードに設定しておくと便利でしょう。 エイリアスで
ed supered -t1,2,4 -x1,1 のように定義しておくのが有効です。

その他
 ほかに、あると便利なものはメイク、ライブラリアン、アーカイバなどです。 ライブラリアンとアーカイバはほぼ同じ機能を持つのでどちらかがあればよいでしょう。 アーカイバと言ってもlhaやZIPとは違い、ライブラリを作成するためのものです。
 ライブラリアンは「.l」、アーカイバは「.a」の拡張子のライブラリを作成するのに使います。

 メイク、ライブラリアンはXCコンパイラを買えば手に入ります。通信上でもメイクと アーカイバは手に入れることが出来ます。

 それぞれ、使用しているバージョンは
make(メイク) :v1.00
lib(ライブラリアン):v1.00
har(アーカイバ) :v1.33

 以上のものを揃えたら、コンパイラの動く環境を構築します。 コンパイラ、インクルードファイル、ライブラリを適当なディレクトリにコピーします。 その他のツールもパスの通ったディレクトリにコピーしておきます。 一般的と思われるディレクトリ構成は

\-+- BIN\ - has.x hlk.x etc...
  |
  +- CC\ -+- gcc.x gcc_cpp.x etc...(コンパイラ)
          |
          +- include\ - stdio.h string.h etc...(インクルードファイル)
          |
          +- lib\ - clib.l gnulib.l etc ...(ライブラリ)

この図のようなものになります。以後、この通りにインストールされているものとして 話を進めていきます。

環境変数を設定する

 次は環境変数を設定します。インストールがうまくいっても環境変数の設定次第では 動くものも動かなくなってしまいますので、注意しましょう。

 以下に環境変数についての簡単な説明を書いてあります。 読み飛ばす人はここをクリック。

 環境変数とは、現在の環境を設定しておくためのシステム変数です。 アプリケーションはこれを参照して、機能を拡張したり変化させたりします。 代表的な環境変数として、pathtempなどがあり、 複数のアプリケーションから参照されることもあります。

 環境変数の設定方法はコマンドラインやバッチファイル内で以下のように記述します。
set [環境変数名]=[設定値]

注意することとして、環境変数は大文字小文字を区別する、=の前後に空白を入れない、 などがあります。現在設定されている環境変数の一覧を表示させたい時には環境変数を 指定せずに

set

と打ち込んでください。


set include=c:\gcc\xc\include
set sfyakko=e:\char\yakko\sfyakko.cnf
set xvimoon=
(注:環境変数をクリアする時の記述方法)

コンパイラを使用する上で必須の環境変数
path
 Cコンパイラやアセンブラなど各種の実行ファイルの所在ディレクトリを記述します。 コマンドを実行する時はこの環境変数を参照して実行ファイルを検索します。 実行ファイルの存在するディレクトリ名をセミコロン(;)で区切って並べますが、 先頭から順に検索するので、並べる順番に気をつけてみるのもいいでしょう。

 ファイルはちゃんと用意してあるのに「コマンドまたはファイル名がちがいます」というエラーが出た場合は パスが正しく設定されていない場合がほとんどなのでこの環境変数を調べてみましょう。


path R:\;C:\;C:\BIN;C:\CC;
(この環境変数はこのようにset文を使わない記述が可能です)

include
 インクルードファイルの存在するディレクトリ名を記述します。 この環境変数はコンパイラやアセンブラが参照します。


set include=C:\CC\INCLUDE

lib
 ライブラリの存在するディレクトリ名を記述します。 コンパイラが参照するほかリンカが参照することもあります。


set include=C:\CC\LIB

temp
 一時作業ファイル(テンポラリファイル)の作成されるディレクトリを記述します。 テンポラリファイルは頻繁に作成、削除が行なわれるので、 アクセススピードの速いディレクトリ(RAMディスクなど)を指定するのが普通です。


temp R:\
(この環境変数はset文を使わずこのような記述をするのが普通です)

MARIKO
 X680x0版GCCの拡張を許可するための環境変数です。SFXVIのキャラクタ開発には必須です。 全角文字を変数、関数名などに使えるように設定する必要があります。
"A" 2進ビット表現の拡張、日本語識別子拡張、割り込み関数の記述
"B" インラインアセンブラの拡張
"C" ソースコードデバッガ用コンパイル
"D" 疑似統合環境の実現(エラーのみ)
"E" 疑似統合環境の実現(ワーニング含む)
"F" コンパイルフェイズの表示


set MARIKO=ABD

必須でない環境変数
GCC_OPTION
 GCCのコンパイルオプションを設定します。この環境変数を使えばコマンドライン文字数の 節約になります。設定出来る文字を以下に示します
"A" -fforce-addrの指定
"E" ED.x系テキストエディタで扱えるエラータグファイルを生成する
"F" -fomit-frame-pointerの指定
"G" メモリが足りない時グラフィックラムを作業用メモリとして使用する
"I" -finline-functionsの指定
"L" -fstrength-reduceの指定
"M" -fforce-memの指定
"O" X680x0専用の最適化を行なう
"P" スタックに0をプッシュするコード、pea.l 0.wとclr.l -(sp)の選択
"S" -fstack-checkの指定
"T" グラフィックラムを使い切った時にテキストラムを使用する
"W" -Wallの指定
"+" C++コメント"//"を認識する


set GCC_OPTION=AEFGILMOPSTW

GCC_AS
 コンパイラが呼び出すアセンブラを指定します。


set GCC_AS=has

GCC_LINK
 コンパイラが呼び出すリンカを指定します。

set GCC_LINK=hlk

GCC_LIB
 ライブラリの拡張子を指定します。 使用しているライブラリの拡張子が.lか.aをコンパイラに通知します。


set GCC_LIB=.l

GCC_NO_XCLIB
 ライブラリファイルの命名法がXC方式(*lib.l)かそうでないか(lib*.l)を指定します。 XC方式の時は設定する必要はありません。


set GCC_NO_XCLIB=yes

DOSEQU
 GCCが生成するアセンブラソースはデフォルトではdoscall.equというシンボル定義ファイルを参照します。 デフォルトでないファイルを使う時に、そのファイル名を指定します。

set DOSEQU=doscall2.equ

MARINA
 疑似統合環境で使われるテキストエディタを指定します。 パスが通してあればフルパスで指定する必要はありません。


set MARINA=SUPERED -x,1

HAS
 HASで常に使用するオプションスイッチを設定します。


set HAS=-u -z

SILK
 HLKで常に使用するオプションスイッチを設定します。


set SILK=-l floatfnc.l


 サンプル通りにインストールされている場合の環境変数設定サンプルを示します。な お、システムドライブはドライブ、ラムディスクはドライブと仮定しています。

GCC+XC ライブラリ環境
path R:\;C:\;C:\BIN;C:\CC;
temp R:\
set include=C:\CC\INCLUDE
set lib=C:\CC\LIB
set MARIKO=ABD
set MARINA=SUPERED
set GCC_OPTION=AEFGILMTW+
set GCC_AS=has.x
set GCC_LINK=hlk.x
set GCC_LIB=.l
set HAS=-u -z
set SILK=-l floatfnc.l
GCC+libc ライブラリ環境
path R:\;C:\;C:\BIN;C:\CC;
temp R:\
set include=C:\CC\INCLUDE
set lib=C:\CC\LIB
set MARIKO=ABD
set MARINA=SUPERED
set GCC_OPTION=AEFGILMTW+
set GCC_AS=has.x
set GCC_LINK=hlk.x
set GCC_NO_XCLIB=yes
set GCC_LIB=.a
set HAS=-u -z
set SILK=-l

 では、コンパイラの動く環境が正しく構築されたかどうか確認するために、サンプル プログラムを作り、コンパイルしてみましょう。
 
サンプルプログラムをダウンロードしたい方は左のリンクを 「リンクを名前をつけて保存」などでディスクに保存してください。

#include <stdio.h>

void main() {
  printf( "愛と勇気と希望の名のもとに\n" );
}

 思わず吹き出してしまいそうなお約束プログラムですが、コンパイラが動くかどうか を確かめるためのものですから我慢しましょう。
 カレントディレクトリにサンプルプログラムを置いて、コマンドラインから

gcc sample01.c

と打ち込んでみましょう。環境に問題がなければ「sample01.x」という実行ファイルが カレントディレクトリに出来ているはずです。

 うまく作れなかった場合は下の囲みを読んで原因を調べてみましょう。 読み飛ばすときはここをクリック。

トラブルシューティング

 さて、正しくコンパイルが出来なかったならば、原因を探ってみましょう。

「コマンドまたはファイル名がちがいますと怒られた」
コンパイラなどのある場所にパスが通っていない、あるいは実行ファイルが足りないと いったことが考えられます。

「エディタが立ち上がって 『sample01.c 1: Error :stdio.h: ファイルまたはディレクトリが見つかりません』と怒られた」
疑似統合環境の設定はうまくいっているようです。この場合はインクルードファイルが 見つからないためエラーになっています。環境変数includeの設定を見直したり、インク ルードファイルがちゃんと用意されているかどうかを調べてみましょう。

「エディタが立ち上がらず、上と同様のメッセージが表示された」
インクルードファイルの設定がおかしい上に、疑似統合環境も設定が正しくありません。 疑似統合環境の設定は環境変数「MARIKO」「MARINA」で指定します。これらを見直して ください。

「アセンブラでfile not foundと怒られた」
doscall.equがみつからないのが原因です。環境変数includeで示されるディレクトリに doscall.equがあるか確認してください。

「ライブラリが見つからないと怒られた」
まず、環境変数libが正しいかどうかを確認してください。次に、ライブラリの名前と拡張子を確認します。 ライブラリの拡張子が「.a」ならGCC_LIB=.aを、拡張子が「.l」である場合は GCC_LIB=.lを環境変数として設定してください。 ライブラリのファイルネームが「libc.l、libc.a」のどちらかである場合は環境変数 GCC_NO_XCLIBにyesを設定してください。 「clib.l、clib.a」であるような場合は環境変数GCC_NO_XCLIBは設定しないでください。

「その他」
テンポラリドライブの空き容量が十分でない。
カレントディレクトリの空き容量が十分でない。
メモリが足りない。
バージョンが低いツールを使っている。

 以上で環境セットアップは終わりです。見事にコンパイラの動く環境が作成出来たな ら、次のステップに移ります。

ひとつ前にもどるトップページへもどる次のページへ進む