MSX BASIC Library for Z88DK
Z88DKでMSX BASICのコマンドやファンクションと同じ感覚で使えるCライブラリを公開しました。
github.com
MSX BASICのコマンドや関数をZ88DKのC言語から使えるようにしたライブラリを作りました。
元々は自分用でしたが、それなりに機能が揃ってきて面白いものができたので公開します。
数年前に作ったものを修正したソースをベースに、Calude codeで機能を追加したりバグを調査・修正して完成度を高めるといった手法で作りました。
MSX BASICでおなじみのSCREEN、COLOR、LOCATE、PRINTといった画面制御はもちろん、LINE、CIRCLE、PAINTなどのグラフィックス描画、PLAY文によるMML演奏、STICK/STRIGによるジョイスティック入力など、BASICの主要なコマンドを一通りカバーしています。
BASICのコマンド名がそのまま関数名になっているので、BASICに慣れた方ならすぐに使えると思います。
例えばHello Worldはこんな感じです。
#include <msxbasic/msxbasic.h>
void main(void) {
basic_screen(1);
basic_color(15, 1, 1);
basic_cls();
basic_print("Hello, MSX World!");
basic_wait_key();
while (1);
}
BASICで書くのとほとんど同じ感覚で書けます。
対応している機能をざっくり紹介すると、
・画面制御(SCREEN 0〜12、COLOR、LOCATE、PRINT、WIDTH、CLS、PRINT USING等)
・グラフィックス描画(PSET、LINE、CIRCLE、PAINT、DRAW、GET/PUT、塗りつぶし円・楕円等)
・スプライト(パターン定義、表示、衝突判定)
・サウンド(BEEP、PSG直接制御、MML演奏、3チャンネル同時演奏、効果音)
・入力(INKEY$、STICK、STRIG、PADDLE、キーボードマトリクス)
・文字列関数(LEFT$、MID$、RIGHT$、STR$、VAL、HEX$、BIN$、OCT$等)
・数学関数(SIN、COS、SQR、RND、MIN/MAX、CLAMP等)
・システム(TIME、VRAM操作、MSX機種判別、BIOS呼び出し等)
・VDP直接アクセス(V9938/V9958コマンド、COPY、ページ切替)
といった感じで、MSX BASICの主要機能はだいたい揃っています。MSX1からMSX2+、turbo Rまで対応しています。
このライブラリを使用したサンプルプログラムもいくつか用意しました。テキスト表示、グラフィックス描画、MSX2グラフィックス、スプライト、サウンド、入力、DRAWコマンド、PAINT/GET/PUT、文字列関数、数学関数、システム関数と一通り試せるようになっています。
リポジトリのexamplesフォルダの中に入っています。
コンパイルにはZ88DK(最新のnightly build推奨)が必要です。
ビルドはbuild.batでライブラリをコンパイルして、build_sample.batでサンプルをROMカートリッジとしてビルドできます。
ROMカートリッジだけでなく、MSX-DOSのCOMファイルとしてもビルドできます。
ROMカートリッジ:
zcc +msx -vn -O3 -compiler=sccz80 -lm -Iinclude -Llib -lmsxbasic -subtype=rom your_program.c -o your_program -create-app
MSX-DOS COMファイル:
zcc +msx -vn -O3 -compiler=sccz80 -lm -Iinclude -Llib -lmsxbasic -subtype=msxdos your_program.c -o your_program.com
APIリファレンスはdocsフォルダに英語版と日本語版のHTMLを用意しています。
GitHub:
https://github.com/uosoft/msx_basiclib_z88dk
