Z80 関連のクロス開発ツール z88dk、
これで MSX 関連のアプリ・ゲームなどを作って公開したいでしょう。
今はブラウザでも動作できる仕組みができていますが、
日本では特に MSX の版権が気になる人もいるのではないか?と思います。
z88dk ならはその点を心配せずに公開する方法があります。

z88dk

z88dk は Windows や macOS などで使用できる、
Z80 に対応している各プラットフォーム向けのクロス開発ツールです。
C 言語コンパイラ・アセンブラ・リンカ・ライブラリなどを備えています。
対応しているプラットフォームは 80 種類を超えます。
日本で発売されている製品だと記載時現在、次が対応しています。

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 を起動する軽量バージョンがあります。

https://webmsx.org/cbios/

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) に変えて、
表示した状態で動作を止めるようにしました。

MSX での実行結果

これを 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.gq/201907/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 の動作もマシン語プログラムに限られています。