WonderSwanのソフトをどう自作するか

こちらの続きです。

nicotakuya.hatenablog.com

WonderSwan用ソフトを自作する方法を検討します。希望する条件は以下の通りです。

・開発環境がフリーであること。

・対応OSがWindows10であること。

WonderWitchを使わないこと。

f:id:nicotakuya:20210522120707j:plain

WonderWitchは使いません

、、、さすがに都合良すぎかな、と思って検索したら、すぐに見つかりました。

 Sebastian Mihaiさんという方が、WonderSwan Color用のプログラム「Swan Driving」を自作されていました。車をボタンで操作するソフトです。

 

sebastianmihai.com

公開しているROMイメージをダウンロードして、エミュレータで実行するとソフトが動きます。ソースコードも公開しています。素晴らしいです。

これを参考にさせて頂こうと思います。

「Dev Kit」のリンク先から開発ツールもダウンロードすることができますが、今回はbatファイルやexeファイルは使わず、ソースファイルと画像データだけを使わせて頂きます。

 

続いて、開発環境を入手します。

アセンブラは「NASM(Netwide Assembler)」を使います。x86系のアセンブラです。

f:id:nicotakuya:20210524111503j:plain

NASMをWindows10で動かした場合

NASMはDOSプログラムなのでWindows10では動きません。そこで、エミュレータで動かすために16bit版を入手します。自分は以下のサイトから2005年公開のVersion 0.98.39をダウンロードしました。 ファイルは「NASM.EXE」だけ使います。もう、サポートが終了しているので、行儀の良くない使い方です。

sourceforge.net

 

「Swan Driving」をビルドします。

適当なフォルダを作って、ソースファイルを置きます。  

f:id:nicotakuya:20210522200813p:plain

ファイルの一覧
  • 「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.wsc

msdos nasm -f bin -o %ROMFILE% %SRCFILE%

pause

 

アセンブラを呼び出してバイナリを生成します。

「_build.bat」を実行すると、コマンドプロンプトが立ち上がって、ビルドを行います。

ビルドに成功すると、「swandriving.wsc」というROMイメージが出来上がります。

f:id:nicotakuya:20210522195858p:plain

ROM情報

参考までに生成したROM情報です。ROMイメージの最後の16バイトにROM情報が記録されています。Sumが0x0000だったり、ROMのサイズが間違っていますが、問題なく動くようです。 

 

f:id:nicotakuya:20210522024756p:plain

WonderSwanエミュレータでの実行結果

 WonderSwanエミュレータで実行すると、上のような画面が動きます。

この技術を応用すれば、WonderSwan用ソフトを自作できるようになります。

ROMイメージをフラッシュメモリに書き込めば、実機でも動くのでは?、、、と期待しています。

 

f:id:nicotakuya:20210522200249p:plain

画像データの例1

f:id:nicotakuya:20210522202339p:plain

画像データの例2

ちなみに「gfx」フォルダには画像データと、パレットデータのバイナリファイルが格納されています。16色モードを使っています。

タイル1枚あたり8x8pixel x4bit=32Byte。

パレット1つあたり2Byte x16色=32Byteです。

将来的には変換ツールを自作したいです。

 

(2021/05/23追記)

以下のページにモノクロ版「Swan Driving」が公開されていましたので、こちらも動かしてみました。初代WonderSwan用プログラムです。

sebastianmihai.com

先ほどと同じく、ソースコードをダウンロードします。

次のようにビルド用のバッチファイルを作ります。ファイル名を変更するだけです。

 

echo off

set SRCFILE=swandrivingBW.asm
set ROMFILE=swandrivingBW.ws

msdos nasm -f bin -o %ROMFILE% %SRCFILE%

pause 

 

ただし、このままビルドして実行すると、画面が灰色のまま固まってしまいます

そこで、次のようにソースを修正してみました。

 

f:id:nicotakuya:20210523001050p:plain

機種のチェックを外す

機種のチェック処理を丸ごとコメントアウトしました。

カラー機の場合、ここで無限ループに落ちてしまうので、それを防ぎます。

 

f:id:nicotakuya:20210523001122p:plain

色の設定を修正

画面モード設定の処理で「VMODE_16C_CHK」を削除しました。あてずっぽで対応したので、間違っているかもしれません。

 

f:id:nicotakuya:20210523001013p:plain

モノクロ版Swan Driving

ビルドし直すと、このように動きました。タイル1枚あたり4階調の表現ができます。

WonderSwanのプログラムを作る場合、初代専用カラー専用両対応のうちどれかを選択しないといけません。

 

f:id:nicotakuya:20210523000931p:plain

画像データの例3

f:id:nicotakuya:20210523001221p:plain

画像データの例4

モノクロの場合、タイルは8x8pixel x2bit=16Byte。パレットは4bit(実質3bit) x4色 =2Byteです。