こちらの続きです。
WonderSwan用ソフトを自作する方法を検討します。希望する条件は以下の通りです。
・開発環境がフリーであること。
・対応OSがWindows10であること。
・WonderWitchを使わないこと。
、、、さすがに都合良すぎかな、と思って検索したら、すぐに見つかりました。
Sebastian Mihaiさんという方が、WonderSwan Color用のプログラム「Swan Driving」を自作されていました。車をボタンで操作するソフトです。
公開しているROMイメージをダウンロードして、エミュレータで実行するとソフトが動きます。ソースコードも公開しています。素晴らしいです。
これを参考にさせて頂こうと思います。
「Dev Kit」のリンク先から開発ツールもダウンロードすることができますが、今回はbatファイルやexeファイルは使わず、ソースファイルと画像データだけを使わせて頂きます。
続いて、開発環境を入手します。
アセンブラは「NASM(Netwide Assembler)」を使います。x86系のアセンブラです。
NASMはDOSプログラムなのでWindows10では動きません。そこで、エミュレータで動かすために16bit版を入手します。自分は以下のサイトから2005年公開のVersion 0.98.39をダウンロードしました。 ファイルは「NASM.EXE」だけ使います。もう、サポートが終了しているので、行儀の良くない使い方です。
「Swan Driving」をビルドします。
適当なフォルダを作って、ソースファイルを置きます。
- 「swandriving.asm」はアセンブラのソースファイルです。
- 「WonderSwan.inc」はOrion_さん(http://onorisoft.free.fr/)という方が作られたインクルードファイルです。アドレス等が記述されています。
- 「gfx」フォルダの中身は画像/パレットデータのバイナリファイルです。
さらに「NASM.EXE」と「MSDOS Player(msdos.exe)」をソースファイルと同じ階層に置きます。MSDOS Playerは16bit版DOSプログラムを動かすエミュレータです。DOSBoxでも実行可能だと思います。ここではexeファイルを同じ階層に置きましたが、パスを設定して、別のフォルダに置いたほうがスマートだと思います。
それから、テキストエディタでビルド用のバッチファイル(_build.bat)を作ります。内容は以下の通りです。
echo off
set SRCFILE=swandriving.asm
set ROMFILE=swandriving.wscmsdos nasm -f bin -o %ROMFILE% %SRCFILE%
pause
アセンブラを呼び出してバイナリを生成します。
「_build.bat」を実行すると、コマンドプロンプトが立ち上がって、ビルドを行います。
ビルドに成功すると、「swandriving.wsc」というROMイメージが出来上がります。
参考までに生成したROM情報です。ROMイメージの最後の16バイトにROM情報が記録されています。Sumが0x0000だったり、ROMのサイズが間違っていますが、問題なく動くようです。
WonderSwanエミュレータで実行すると、上のような画面が動きます。
この技術を応用すれば、WonderSwan用ソフトを自作できるようになります。
ROMイメージをフラッシュメモリに書き込めば、実機でも動くのでは?、、、と期待しています。
ちなみに「gfx」フォルダには画像データと、パレットデータのバイナリファイルが格納されています。16色モードを使っています。
タイル1枚あたり8x8pixel x4bit=32Byte。
パレット1つあたり2Byte x16色=32Byteです。
将来的には変換ツールを自作したいです。
(2021/05/23追記)
以下のページにモノクロ版「Swan Driving」が公開されていましたので、こちらも動かしてみました。初代WonderSwan用プログラムです。
先ほどと同じく、ソースコードをダウンロードします。
次のようにビルド用のバッチファイルを作ります。ファイル名を変更するだけです。
echo off
set SRCFILE=swandrivingBW.asm
set ROMFILE=swandrivingBW.wsmsdos nasm -f bin -o %ROMFILE% %SRCFILE%
pause
ただし、このままビルドして実行すると、画面が灰色のまま固まってしまいます。
そこで、次のようにソースを修正してみました。
機種のチェック処理を丸ごとコメントアウトしました。
カラー機の場合、ここで無限ループに落ちてしまうので、それを防ぎます。
画面モード設定の処理で「VMODE_16C_CHK」を削除しました。あてずっぽで対応したので、間違っているかもしれません。
ビルドし直すと、このように動きました。タイル1枚あたり4階調の表現ができます。
WonderSwanのプログラムを作る場合、初代専用、カラー専用、両対応のうちどれかを選択しないといけません。
モノクロの場合、タイルは8x8pixel x2bit=16Byte。パレットは4bit(実質3bit) x4色 =2Byteです。