Last Update : 2005/06/xx
フリーのWindowsプログラミングツール『HSP』(Hot Soup Processor)を利用して、いろいろなプログラム(ゲームエミュレータのランチャー、HSP補助ツール)を製作してきたことから知り得たプログラミング情報をテキト〜に書き出してます。
基本的には、ゲームエミュレータのランチャー(フロントエンド)的なソフトウェアを製作するような場合のあれこれです。
エミュレータという外部プログラムを起動する方法です。
エミュレータを起動して、ゲームファイルを読み込ませる処理は、HSP標準のexec命令を利用します。たとえば、エミュ レータの実行ファイル名が「abcemu.exe」で、ゲームのROMイメージファイル名が「hogehoge.gb」なら下のような感じ。
romfile = "hogehoge.gb" ; エミュレータ実行ファイルの拡張子「.exe」は省略可 exec "abcemu.exe "+romfile+"", 1
ただ、このようにして起動できるかは、エミュ レータの対応次第です。起動できるかの判定基準は、エミュレータの実行ファイル(アイコン)上にゲームファイルをドラッグ&ドロップしてゲームの読み込みが可能なもの。
なお、上のスクリプトコードはエミュレータやゲームファイルが、ランチャーと同じフォルダ上に置かれていることを前提としています。別の場所にファイルが置かれているならば、以下のように全ファイルパスを渡してやります。パスの文字量がそれなりにあるはずなので、あらかじめsdim命令による容量確保をお忘れなく。
; 適当にパス文字用の容量確保 sdim emufile, 256 sdim romfile, 256 emufile = "c:\\emulator\\aaaemu\\abcemu.exe" romfile = "c:\\emulator\\aaaemu\\game\\hogehoge.gb" exec ""+emufile+" "+romfile+"", 1
DOS用エミュレータ(最近はSDLライブラリを利用したWindows用エミュレータ)は、DOSプロンプトを利用するので、WindowsのGUIに慣れてしまうと少々扱いにくいです。おまけに今はDOSプロンプトを知らなくてもWindowsが扱えるので、DOSプロンプト自体を知らない、なんてな人もいるわけです。そのような時にランチャーは、便利なツールとなります。
DOS用エミュレータは、一般的にDOSコマンドラインオプションからエミュレータの設定をカスタマイズできる機能を提供しています(エミュレータのReadmeファイルを参照)。それを起動時に利用するには、以下のような感じです。オプションの部分は、ゲームファイルのパスの前か後に渡すスタイルが一般的でしょう。(例として、フレームスキップやスクリーンサイズ用のオプションが用意されている)
option = "-frameskip 4 -screen 2" exec ""+emufile+" "+option+" "+romfile+"", 1 ; あるいは、 ; exec ""+emufile+" "+romfile+" "+option+"", 1
なお、DOS用エミュレータは起動時に「DOSプロンプト画面」と「ゲーム画面」の2つが表示される場合があります。そのような場合は、最初の不要なDOSプロンプト画面を以下のように「最小化モードで実行」で起動するとOK。(完全な非表示は標準命令では不可能)
exec ""+emufile+" "+option+" "+romfile+"", 3
エミュレータは、ZIP形式など圧縮したゲームファイルを読み込めるような機能に対応していることが多いです。対応しているならば、圧縮ファイルのパスをそのまま渡すだけでOK。一方、対応してない場合は、ランチャー自身がゲームファイルをWindowsのテンポラリフォルダなどにいったん解凍し、その任意のフォルダにある解答済みファイルのパスを渡し、後に削除、というスタイルが一般的?
HSP2では解凍用ライブラリ(UNZIP32.dll、UNLHA32.dllなど)向けのHSP用拡張プラグインを使う、llmod.as を利用して解凍用ライブラリを直で利用する、といったところ。HSP3については、HSP3 あれこれ(ファイル編)のサンプルソースを参照。そのほか、MODプレーヤーlbassmodのサンプルではzlibライブラリを利用。
GB/GBCエミュレーションを行うHSP2用拡張プラグイン「Hspboy」を利用したソフトの紹介と、その他のエミュレータに関連するであろうHSP用拡張プラグインを適当に紹介しています。
> HSP拡張プラグイン「Hspboy」を利用したソフトウェア
> Let's Emu! (GBAエミュレータ・GBエミュレータ・DSエミュレータ)