MSXDOSのC言語によるセルフ開発は問題があり、必ずDOS2を使うことが必要。
CコンパイラはCP/M用に開発されたものが大半であるが、
MSXDOS1はCP/M互換性を持つ一方で、完全互換というわけではないのでソフトウエアが動作
しなかったり、最悪の場合ファイルが破壊されたりする。
典型的な問題を生じるのがCP/M用のCコンパイラ。Cコンパイラはバッチで動いていたり、
コードチェックなどで外部コマンドが頻繁に呼ばれて実行されたりする。
多くのファイルを同時にオープンしたりするので、CP/M用のCコンパイラをMSXDOS1上で
ファイル読み書きしているとファイルが消えるなどの問題が生じる。
(CP/Mと違いMSXDOS1はメモリ配置が若干異なり、FATアロケーションのバッファが破壊される
為にファイルが消えるのかもしれないが、詳しくは判らない)
DOS2では問題は生じないようなので、CP/M互換のCコンパイラでセルフ開発を行なう場合は
MSXDOS2環境が必要。
BDS-Cは現在パブリックドメインで配布されているCP/MのCコンパイラ。
これをMSXDOSのセルフ開発として使う事は可能。
ただしMSX特有のAPIや機能を扱うライブラリはない。基本的な標準入出力やファイルI/O、整数のみ。
コンパイルの仕方を示す。
t1.c
#include <stdio.h>
main(){
printf("hello");
}
a:>cc t1
a:>clink t1
BDS-CはK&R記法を用いるC言語。
K&R-Cは関数の定義が現代のANSI-Cと比べて若干違いがある。その違いはPascal風に引数の型を
宣言すること。
ANSI-Cでの関数の引数の表現は以下。
int main(int i);
int main(int i){
//code
}
K&R-Cでの関数の引数の宣言は以下のようにPascal風で若干違いがある。
main(argv,argc);
char *argv[];
int argc;
{
/* code */
}
変数名については以下のような対応関係がある。
K&R-C |
ANSI-C |
char |
char |
int |
int |
unsigned |
unsigned int |
パブリックドメインとして配布されているBDS-Cにはfloatライブラリはない。
(市販されていた頃には実数計算ライブラリが存在したようだが)
基本的に整数のみと考えられる。またLong型はサポートされない。
これら以外はvoid型やポインタはANSI-Cとほぼ同じ。構造体や共用体も同じ。
BDS-Cでは変数型の修飾としてregisterをサポートしている。
標準入出力などのライブラリ関数は基本的には現在のCコンパイラと同じ。
詳細はヘッダを参照すること。
セルフ開発用のもう一つのCコンパイラとしてはHI-TECCH Cがある。
このCコンパイラはANSI-Cで現在一般的なC言語の記法と同じ。
ライブラリには標準入出力のほかFloatもある。
別途ResourceKitを用意することでMSX特有の機能を使う事ができる。
基本的なCプログラミングのセルフ開発で必要なアーカイブファイルはhitech-1.pmaのみで良い。
このほかHTC Resourcekit 1/2がある。
ResKit#1は日本語2byte処理対応のライブラリ関数や一部のコマンド日本語対応、
グラフィックライブラリ関数追加などが行なわれた配布物。
ResKit#2はHTCライブラリに含まれて居ない一部のANSI-Cライブラリや追加DOS用関数などがある。
コンパイラとして使う場合はhitech-1.pmaのみでよい。
hello.c
#include <stdio.h>
void main(void){
printf("hello");
}
a:>c hello
float実数計算ライブラリを用いる場合は以下のようにする。
float.c
#include <stdio.h>
#include <math.h>
void main(void){
double a=3.14159;
printf("%f",a);
}
>c -LF float
(オプション-LFで浮動小数点ライブラリlibfがリンクされる)
Resourcekit#1で配布されているゲーム用に使えるグラフィックライブラリを使う例を示す。
必要なファイルは予めResourcekit#1からコピーしておく。
以下のファイルはlibxを使うので、コンパイル時にライブラリファイルのlib(?)の英字をリンク可能にするために-Lxなどオプション指定しておく。
このライブラリにはグラフィック関係の関数がある。
ライブラリファイル
libx.lib
ヘッダファイル
glib.h
msxbios.h
uty.h
これらのファイルにはグラフィック関数やBIOS関数とヘッダがあり、
DOSで動作するグラフィックやゲームアプリケーションを作ることができる。
関数の詳細についてはヘッダを参照。
draw8.c
#include <stdio.h>
#include <msxbios.h>
#include <glib.h>
void main(void){
int x;
int y;
screen(8);
for(y=0; y<200; y++){
for(x=0; x<200; x++){
pset(x,y,x,0);
}
}
screen(0);
}
a:>c -LX draw8
(ライブラリを使う場合はlibx.libをリンクするため、コンパイル時に -LX を指定する)
最終更新:2012年12月08日 22:15