sdccのほかにz80向けクロス開発Cコンパイラとしてz88dkがある。
今回はz88dkを使ってみる。
z88dkは
コンパイルオプション指定で様々な環境の実行形式を作成する。
MSXDOSの例としてCP/M向けのソースのコンパイル例を示す。
(MSXDOSはCPM互換なのでCPMオプションで可)
c1.c
main(void){
printf("hello");
}
>zcc +cpm c1.c -o c1.com
z88dkは浮動小数点ライブラリが使える。浮動小数点はfloat,doubleが可能。
幾つかの三角関数なども使える。それらを使う場合はコンパイルオプションに-lmを追加する。
c2.c
main(void){
double a=123.45;
printf("%f",a);
}
>zcc +cpm c2.c -o c2.com -lm
整数のみのバイナリと違い、浮動小数点を使う場合は6kb程度にサイズは肥大化する。
このほかにCファイル関数なども標準的な機能が備わっている。
z88dkにはMSX環境に対応するコンパイルオプションが用意されている。
コンパイラが前提としているハードウエアはMSX1。MSX2以降は別途開発が必要。
MSX1環境は基本的にMSXDOSを前提としたバイナリを作成するらしい。このオプションでは
CPM互換と異なり幾つかのMSXBIOSを使う関数ができるが、
ファイル操作関数はダミーライブラリが
リンクされ機能しない様子。
コマンドオプション-startup=2は必ず指定する。これは先頭の初期化コードを選択的に追加するもの。
ここで-startup=オプションは数値1または2を指定可能。
2がMSXDOSで動作する環境のビルド。1は不明だがBIOSが初期化されるようなので別途ZORGを指定
するなどすればDOS以外の環境のバイナリが作成できるのかもしれない。
startupはz88dkのMSX1用コンパイル設定ファイルに書かれているアセンブラ。
MSX環境向けの基本的なコンパイル操作は以下のとおり。
>zcc +msx c3.c -o c3.com -startup=2
作成した実行形式はMSXDOS(MSX1)で実行することができる。
examples\msx以下には幾つかのサンプルがある。コンパイル手順は以下。
>zcc +msx ex1.c -o ex1.com -startup=2 -llib3d
>zcc +msx ex2.c -o ex2.com -startup=2
>zcc +msx ex3.c -o ex3.com -startup=2
(ex4.c/ex5.cは変数名M_PIを小文字に修正してコンパイル)
>zcc +msx ex4.c -o ex4.com -startup=2 -lm
>zcc +msx ex5.c -o ex5.com -startup=2 -lm
>zcc +msx ex6.c -o ex6.com -startup=2
>zcc +msx ex7.c -o ex7.com -startup=2
>zcc +msx ex8.c -o ex8.com -startup=2
>zcc +msx ex9.c -o ex9.com -startup=2 -llib3d
>zcc +msx ex10.c -o ex10.com -startup=2
(ex11.cは変数M_PIを小文字に変換)
>zcc +msx ex11.c -o ex11.com -startup=2 -lm -llib3d -lmalloc
>zcc +msx ex12.c -o ex12.com -startup=2 -lm
最終更新:2014年03月10日 20:11