BDS C の使い方 - MSXで使ってみる
>BDS C の使い方 - 目次
パブリックドメインの C コンパイラ、 BDS C を MSX で使ってみます。今回は画面キャプチャが容易なエミュレータを使用しましたが、実機でも同じように使用できます。
BDS C の概要は BDS C の使い方 - とりあえず使ってみる などをご覧ください。
インストールと言っても、必要なファイルをコピーするだけの簡単な作業です。
配布されている ZIPファイル (bdsc-all.zip) から、以下のファイルを MSX-DOS の起動ディスク(のルートディレクトリ)にコピーするだけです。
実際に Bドライブ に用意した hello.c をコンパイルしてみました。
コンパイルとリンクが正常に終了したら、出来上がった hello.com を実行してみます。
b:hello
"Hello, world!" と表示されたら成功です。
その時の、MSXの画面の様子はこんな感じ。
BDS C には Z80 の I/Oポートを直接アクセスする関数があるので、MSX の VDP を直接操作するプログラムを作ってみます。
ここで使った outp() なんかの便利な関数は、マニュアルの Chapter3 で簡潔に説明されていますし、ソースコード(DEFF2A.CSM DEFF2B.CSM)も付属していますので見てみてください。英語だけれど見ればわかる程度の文章です。
BASICによくある、メモリを直接読み書きする PEEK POKE 関数や、レジスタに値をセットして指定アドレスを CALL する 関数、BDOSコール、メモリのブロック転送なんかも有って便利に使えそうです。
コンパイルして実行してみると
動きました。
動いたのですが、VDPのアクセス中に、割り込みを禁止しなければならない所でそれを行っていないので、この例では VRAMアドレスの指定がきちんと出来ていません。
というわけで、マシン語とのリンクに続きます。
>BDS C の使い方 - 目次
パブリックドメインの C コンパイラ、 BDS C を MSX で使ってみます。今回は画面キャプチャが容易なエミュレータを使用しましたが、実機でも同じように使用できます。
BDS C の概要は BDS C の使い方 - とりあえず使ってみる などをご覧ください。
インストール
インストールと言っても、必要なファイルをコピーするだけの簡単な作業です。
配布されている ZIPファイル (bdsc-all.zip) から、以下のファイルを MSX-DOS の起動ディスク(のルートディレクトリ)にコピーするだけです。
bdsc160\ CC.COM コンパイラ本体 CC2.COM コンパイラ本体2 CLINC.COM リンカ DEFF.CRL 標準ライブラリ DEFF2.CRL 標準ライブラリ2 C.CCC スタートアップルーチン bdsc160\work\ STDIO.H 標準ライブラリのヘッダファイル
Hello, world!
実際に Bドライブ に用意した hello.c をコンパイルしてみました。
cc b:hello コンパイル(CC2は自動的に呼び出されます) clink b:hello リンク
コンパイルとリンクが正常に終了したら、出来上がった hello.com を実行してみます。
b:hello
"Hello, world!" と表示されたら成功です。
その時の、MSXの画面の様子はこんな感じ。
BDS C には Z80 の I/Oポートを直接アクセスする関数があるので、MSX の VDP を直接操作するプログラムを作ってみます。
/*
BDS C でMSXのI/Oを直接操作してVDPをいじってみる
*/
#define VDP 0x98
main()
{
char count;
outp(VDP+1,0); /* VRAM アドレスセット */
outp(VDP+1,0x40); /* VRAM アドレスセット 書き込み指示 */
for(count=0xFF; 0!=count; count--)
{
outp(VDP,count); /* VRAM 書き込み 自動インクリメント*/
}
}
ここで使った outp() なんかの便利な関数は、マニュアルの Chapter3 で簡潔に説明されていますし、ソースコード(DEFF2A.CSM DEFF2B.CSM)も付属していますので見てみてください。英語だけれど見ればわかる程度の文章です。
BASICによくある、メモリを直接読み書きする PEEK POKE 関数や、レジスタに値をセットして指定アドレスを CALL する 関数、BDOSコール、メモリのブロック転送なんかも有って便利に使えそうです。
コンパイルして実行してみると
動きました。
動いたのですが、VDPのアクセス中に、割り込みを禁止しなければならない所でそれを行っていないので、この例では VRAMアドレスの指定がきちんと出来ていません。
というわけで、マシン語とのリンクに続きます。
>BDS C の使い方 - 目次