2014年9月11日木曜日

BDS C の使い方 - とりあえず使ってみる

>BDS C の使い方 - 目次

Z80 のプログラムを書く用事があったんですが、アセンブラは大変なので自由に使える Cコンパイラは無いものかな?と google で検索すると、BDS C V1.6 が明確にパブリックドメイン宣言されて、BD Software さんから配布されています。
他にもいくつかあるようでしたが、BDS C には立派な PDF形式のマニュアルも同梱されていて、使い方を調べやすそうな感じがしたので、今回はこれを使うことに決めました。

シャープから X1 用として販売されていた Cコンパイラが、この BDS C (α-C) だったようですね。


ダウンロード


BD Software さんの BDS C のページ の Primary Downloads の所から 1.5MB の ZIP ファイル (bdsc-all.zip) をダウンロードします。この bdsc-all.zip に C コンパイラの動作に必要なファイルすべてと、PDF形式のマニュアルが含まれています。
Documentation のところに容量の大きなマニュアル (bdsc-guide-full.pdf) もあるのですが、表紙画像の有無だけの違いのようで、内容は同じようでした。

BDS C は CP/M 上で動作するのですが、実機より現代の PC で動作させたほうが高速ですし、普段使っているテキストエディタも使えてずっと便利なので、Windows 上で CP/M のエミュレータを使用して、その上で BDS C を実行することにします。
今回は、村上 敬司 さんの CP/M program EXEcuter (CPM.EXE) を使用します。64bit版 windows では MS-DOS汎用のプログラムは動作しないので、win32版の CP/M program EXEcutor for Win32 をダウンロードしておきます。


コンパイラを動かすのに必要なファイル


以下のファイルだけがあればコンパイラが動作できます。

bdsc160\
    CC.COM           コンパイラ本体
    CC2.COM          コンパイラ本体2
    CLINC.COM        リンカ
    DEFF.CRL         標準ライブラリ
    DEFF2.CRL        標準ライブラリ2
    C.CCC            スタートアップルーチン

bdsc160\work\
    STDIO.H          標準ライブラリのヘッダファイル

適当な作業フォルダ(ディレクトリ)を作成して、これらのファイルをコピーします。bdsc160\ と bdsc160\work\ の中身をすべてコピーしても良いです。
続いて、windows 上で動作させるために、CP/M program EXEcuter の実行ファイル CPM.EXE も同じフォルダにコピーします。

動かしてみる


これで動作の準備が整ったので、とりあえずコンパイラを起動してみましょうか。
コマンドプロンプトを開いて、ファイルをコピーしたフォルダに移動して、

cpm cc

と入力します。
C:\   \work>cpm cc
BD Software C Compiler v1.60  (part I)
Usage:
cc  [-p] [-o] [-a ] [-d ] [-m ] [-e ] [-r ]

C:\   \work>
このように使い方が表示されたら正常です。


Hello, world!


続けて、実際に簡単なプログラムをコンパイルしてみます。
ソースファイル .\test\hello.c をメモ帳や普段使っているテキストエディタで作成します。
内容はこんな感じで
#include <stdio.h>

main()
{
    printf("Hello, world!\n");
}

早速コンパイルします。
cpm cc test\hello             コンパイル(CC2は自動的に呼び出されます)
cpm clink test\hello          リンク

コンパイルとリンクが正常に終了したら、出来上がった hello.com を実行してみます。
cpm test\hello

"Hello, world!" と表示されたら成功です。

出力はこんな感じ

C:\   \work>cpm cc test\hello
BD Software C Compiler v1.60  (part I)
  43K elbowroom
BD Software C Compiler v1.60 (part II)
  40K to spare
C:\   \work>cpm clink test\hello
BD Software C Linker   v1.60

Last code address: 0E49
Externals start at 0E4A, occupy 0006 bytes, last byte at 0E4F
Top of memory: FDFF
Stack space: EFB0
Writing output...
  51K link space remaining
C:\   \work>cpm test\hello
Hello, world!

C:\   \work>

出来上がったファイルは次の通り
hello.c            自分で書いたソースファイル
hello.CRL          hello.c をコンパイルして出来たライブラリファイル
                   同名のソースファイル内のすべての関数が入る
hello.com          hello.CRL とスタートアップルーチン (C.CCC) や
                   使用したライブラリをリンクして出来上がった実行ファイル

とても簡単に使うことができました。
コンパイルとリンクを続けて行う、バッチファイルを作っておいても楽で良いですね。



BDS C のマニュアルはきちんとしていて読みやすいのですが、OCRで作成したのか単語中に余分なスペースが入っていて、機械翻訳にそのまま掛けられずちょっと不便でした。
当初は頑張って英語の付属マニュアルを読んでいたのですが、なにか楽できないかなと検索したら、amazon で古本の「BDS C の使い方 稲川幸則 渡辺修 共訳 工学図書」が送料込み 257円で在庫していたので、さっと購入しました。本のタイトルからは少しわかりにくいのですが、この本は V1.5a の BDS C User's Manual をそのまま翻訳したもので、 v1.6 でもほとんどそのまま通用しました。(V1.5 と V1.6 ではライブラリが変更されていて、独自のフィル操作関数だったのが V1.6 で標準Cライブラリと同じになっています。配布されている V1.6 には V1.5 のライブラリ(BDSCIO.H と DEFF15.CRL)も付属しています)

>BDS C の使い方 - 目次