z88dk で作ったものを MSX の版権を心配せずに WebMSX で公開。
Z80 関連のクロス開発ツール z88dk、
これで MSX 関連のアプリ・ゲームなどを作って公開したいでしょう。
今はブラウザでも動作できる仕組みができていますが、
日本では特に MSX の版権が気になる人もいるのではないか?と思います。
z88dk ならはその点を心配せずに公開する方法があります。
z88dk
z88dk は Windows や macOS などで使用できる、
Z80 に対応している各プラットフォーム向けのクロス開発ツールです。
C 言語コンパイラ・アセンブラ・リンカ・ライブラリなどを備えています。
対応しているプラットフォームは 80 種類を超えます。
日本で発売されている製品だと記載時現在、次が対応しています。
- EPSON HC-40
- EPSON HC-80 / HC-88
- SONY SMC-70 / SMC-777
- CASIO FP-1000 / FP-1100
- SHARP PC-E200 / PC-G800~PC-G850 シリーズ
- ソード M5
- MSX
- 三菱 MULTI8
- SHARP MZ-80・MZ-700
- SHARP MZ-2500
- TOSHIBA パソピア7
- NEC PC-6001 / PC-6601 シリーズ
- NEC PC-8801 シリーズ
- CASIO PV-1000 / PV-2000
- バンダイ RX-78 GUNDAM
- SEGA SG-1000 / SC-3000
- SEGA マスターシステム
- バンダイ TV-JACKスーパービジョン8000
- TI 電卓
- Canon X-07
- SHARP X1
- シンクレア ZX81
MSX でいうと、VDP 関連は MSX1 が主で、MSX2 は途上状態です。
最近 MSX2+・MSX turbo R の機種類判別などの対応しています。
MSX-DOS 関連は MSX-DOS2 もライブラリで対応済みです。階層ディレクトリも扱えます。
MSX2・2+・turbo R 向けのライブラリがまともにできれば、扱えそうですね。
なお、z88dk にはプラットフォーム共通の
モノクログラフィック・モノクロスプライト機能もあり、
MSX に限らない各プラットフォーム向けの開発もできます。
更に z88dk で特筆すべき点として、出力している形式が充実している事です。
- カセットテープ形式(.cas → BASIC より BLOAD"CAS:",R)
- カセット音声 ..WAV 形式(.wav)
- BASIC BLOAD 形式(.msx → BASIC より BLOAD"~.MSX",R、番地指定で USR 実行も可)
- MSX-DOS・2 実行ファイル形式(.com)
- ROM カートリッジ形式(.rom)
z88dk でビルドしたら、それをすぐに MSX エミュレータで実行できてしまうんです。
もちろん実機に持っていく事もできます。.MSX や .COM でディスク経由にしたり、
.WAV で音声読み込みしたりもできます。
カセットテープ形式なら MSX1 でも実行できてしまいます。
WebMSX
MSX エミュレータも Web ブラウザ上ですぐに実行できるようになってしまいました。
でも心配なのは MSX の版権。その辺の記載は一切ないのですね。
回避策があります。WebMSX には C-BIOS を起動する軽量バージョンがあります。
C-BIOS
MSX エミュレータを触れている人なら C-BIOS をご存知でしょう。
MSXPLAYer を除き、MSX エミュレータをまともに使おうとすると、
MSX の実機から ROM を吸い出して~という事になるのですが、
今やまともに動作する実機を持っている人は少ないでしょう。
しかし、ROM イメージを配布するのはさすがに NG という感じがしますよね。
そこで開発されたのが MSX の BIOS と互換性のある BIOS を作ってしまおうと。
それが C-BIOS です。ソースを一から作られているそうです。
BASIC は動きませんが、ROM カートリッジイメージとテープは対応しています。
つまり……
大事なキーワードを残しました。ROM カートリッジイメージ です。
z88dk はこの .rom ファイルを直接出力できます。
つまり、z88dk で開発したものを .rom ファイルで出力して、
それを WebMSX 軽量 C-BIOS 版で実行する事ができます。
これだと MSX 関連の版権も心配はいらなくなるのです。
サンプル
簡単な実例を挙げておきます。
#include <graphics.h>
#include <math.h>
#include <stdio.h>
void main() {
int x, y;
clg();
for (x=0; x<=getmaxx(); x+=2) {
plot(x, getmaxy() / 2);
}
for (x=0; x<=getmaxx(); x++) {
y = (int)((getmaxy() / 2) * (1.0 - sin(M_PI * 2.0 * x / getmaxx())));
if (x==0){
plot(x, y);
} else {
drawto(x, y);
}
}
while (1);
}
サインカーブのプログラム。
モノクログラフィックを使っているので、MSX 以外でもビルドできます。
https://gist.github.com/fu-sen/4e079229d43a0aa6c9d40734c35fb2ab
今回は最後のキー入力をなくし while(1) に変えて、
表示した状態で動作を止めるようにしました。
これを ROM カートリッジイメージで出力します。
そのため、while(1) として、プログラムを中断せずに
無限ループで停止するようにしています。
zcc のオプションは -subtype=rom です。
浮動小数点数型を使用しているので、 -lm も入っています。
あとは +msx と -lmsxbios。-bn は出力を sin.~ にしてます。
zcc +msx -lm -lmsxbios -create-app -subtype=rom -bn sin sin.c
sin.rom ができました。それをネット上でダウンロードできる場所に置きます。
そうしたら、WebMSX 軽量 CBIOS 版で実行してみます。
https://webmsx.org/cbios/?MACHINE=MSX2PJ&ROM=https://~.rom の置き場所~.rom
これでリンクをクリックして WebMSX が起動して実行されます。
https://webmsx.org/cbios/?MACHINE=MSX2PJ&ROM=https://balloon.asia/2019/07/sin.rom
更に……
更にこんな事もできます。
WebMSX/release/最新版/cbios/embedded/wmsx.js をダウンロードし、
.rom ファイルと共にサイトやブログ内に入れます。
https://github.com/ppeccin/WebMSX/tree/master/release/stable
wmsx.js を読み込んだ後にパラメータを入れます。
この時、省略表記では認識されず、フル表記にする必要があるようです。
<div id="wmsx" style="text-align: center; margin: 20px auto 0;">
<div id="wmsx-screen" style="box-shadow: 2px 2px 10px rgba(0, 0, 0, .7);"></div>
</div>
<script src="/wmsx.js"></script>
<script>
WMSX.MACHINE = "MSX2PJ";
WMSX.CARTRIDGE1_URL = "rom/sin.rom";
</script>
↑は画像ではないですよ。WebMSX が動いています。
WebMSX がブログに貼り付けできてしまいます。
ページを表示させた時点で WebMSX が起動し、動作している事にご注意下さい。
z88dk で作ったものを動かせる状態で公開!
こんな感じで、z88dk で作った作品を
C-BIOS で動作する WebMSX で起動し、動かす事ができます。
これなら MSX の版権も心配なく使えます。お試し下さい。
追加 2019/07/07
ポケコン PC-E200・G シリーズのエミュレータには g800 がありますが、
これの JavaScript 版 g800.js が存在します。
貼り付けは簡単。
<script src="g800.js?zoom=3&program=program/sin.ihx&start=100"></script>
ポケコンのプログラムもこんな感じで Web 上での動作が可能です。
追加 2019/07/08
MSX-BASIC プログラムを ROM カートリッジイメージにする事もできますが、
この .rom ファイルは C-BIOS で起動しない事を確認できています。
マシン語記載の .rom に限られるようです。ご注意下さい。
同様に g800.js の動作もマシン語プログラムに限られています。
追加 2019/07/30
このブログ、もちろんスマートフォンでも表示できるようにしています。
WebMSX もスマートフォン対応で専用画面に切り替えて動作するのですが、
g800.js は対応していないので、はみ出して表示されてしまいます。
表示には script タグを使用して g800.js ファイルを実行していますが、
その中で canvas タグを生成し、表示させています。
そのため、canvas タグで横幅の最大を 100% にすれば縮小表示してくれます。
ブログでは img タグなどで使われる方法です。
canvas
{
max-width: 100%;
}
という事でスマートフォンでも横幅に収まる表示になっているでしょう。