fMSXSO
Version 0.82
制作:hQ
はじめに
動作環境
必要なもの
コンフィグファイルの書き方
コンフィグファイル MSX.cfg
コンフィグファイル OPLL.cfg
キー配置
ログファイルについて
hQが書いておいた方がよいこと
起動方法
ディスクイメージの使い方
ROMイメージの使い方
状態セーブ・ロードの使い方
バグ・対応していないこと
今後の発展につて
お世話になった方々
参考資料
制作環境
連絡先など
このソフトは、Marat Fayzullin氏の fMSX を基に作られた、Windows用 MSX2+ エミュレータです。
MSX のエミュレータというともう多くの種類のものが出回っています。が、なぜわざわざこうして作ったとかというと、他のエミュレータで満足できなかったのと、何となく作ってみたかったのが理由です。
このエミュレータを作るうえで一番の目的としているのが OPLL のエミュレートです。現在の所、MIDI でエミュレート出来ればいいと考えています。
Windows98
MIDI音源
DirectX7
以下のロムイメージが必要です。
MSX2P.rom
MSX2PEXT.rom
FMBIOS.rom (*)
DISK.rom (*)
KANJI.rom (*)
KNJDRV.rom (*)
TANKAN.rom (*)
(*)は無くても起動できます。
TANKAN.romは、KNJDRV.romが16kbytesの時のみ必要です。KNJDRV.romが32kbytesであれば必要ありません。
このソフトは「MSX.cfg」「OPLL.cfg」の2つのファイルに必要な情報を書いておかなければおそらく起動しません。といっても、今のところややこしい設定はありませんから、安心しておいてください。
コンフィグファイルの書き方を説明します。
コンフィグファイルは「.」(半角ピリオド)とキャリッジリターン(つまり改行)に挟まれた部分のみを抜き出して解釈するので、ピリオドさえ使わなければ注釈分は自由です。
書式は「.DeviceNumber 01」と、こんな感じです。注意としては、
・ピリオドの直後に設定名が来ること
・設定名は大文字と小文字を間違えずに書くこと
・数字は16進二桁。1桁で良くても「0」をつける
・改行を挟まない。
くらいですね。コンフィグの内容は全てログファイルに書き出されるので変だったら確認してみてください。
「OPLL.cfg」の「.DeviceNumber」以外は、最初は変更しなくてもいいと思います。
- .MSXSpeed ?? ?? (0000-ffff)
- 「クロック周波数 / (256*60)」で、パラメータは (第1パラメータ×256)+(第2パラメータ) となるようにします。00 e9 (10進で233) で1倍の速さです。3579545/(256*60)=233 ですね。
意味的には水平帰線間に実行するサイクル数です。割り込みの速さには関係しません。
- .HInterruptOffset ?? ?? (01ff-00ff)
- 水平帰線割り込みのタイミングの補正用です。水平帰線割り込みの位置をずらします。
- .DisplayMode ?? (00-01)
- 画面モードを 00 で 320x240 、01 で 640x480 にします。。
- .CheckSprite ?? (00-01)
- スプライトの衝突を検出するかどうかです。01 で検出します。
- .UsePSG ?? (00-01)
- 00 以外でPSGをエミュレートします。
- .UseSCC ?? (00-03)
- 01 - 03 でSCCをエミュレートします。03 が一番音質が良く、01 が処理が軽いです。
- .WriteRoom ?? ?? (0000-ffff)
- サウンドバッファへデータを書き込んでいるときに音に追いつかれないようにするための余裕です。735(10進)で 1/60 秒分の余裕です。大きいほど音が安定し、小さいほどPSGの遅れが少なくなります。
- .WriteSize ?? ?? (0000-ffff)
- サウンドバッファへデータを書き込むとき、どれくらい先の分まで書き込むかを指定します。735(10進)で 1/60 秒分で、大きいほど音が安定し、小さいほどPSGの遅れが少なくなります。
- .PSGVolume ?? ?? (2710-0000)
- PSGのトーンのボリュームです。0 が最大で 10000(10進)が最小です。
- .NoisVolume ?? ?? (2710-0000)
- PSGのノイズのボリュームです。同上。
- .SCCVolume ?? ?? (2710-0000)
- SCCのボリュームです。同上。
- .Joypad1 ?? (00 - fe , ff)
- ポート1に対応するジョイスティックのデバイスナンバーです。ff を指定すると使用しません。
- .Joypad2 ?? (00 - fe , ff)
- ポート2に対応するジョイスティックのデバイスナンバーです。ff を指定すると使用しません。
- .UseNumpad ?? (00 - 02)
- テンキーを何に使うかを指定します。テンキーとしては使えません。
00 : テンキーは使用しません
01 : ポート1のジョイパッドとして使用します
02 : ポート2のジョイパッドとして使用します
- .CommandKey ?? ?? ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から終了・Aドライブディスク入れ替え・Bドライブディスク入れ替え・状態セーブ・状態ロード・スクリーンショット・画面表示禁止・ディスプレイモード切替・フルスクリーン表示・デフォルト時でいう[右Shift] のキーの番号です。
数値は DirectInput のものです。分からない人は「Key.txt」に一部書いてあるのでそっちを見てください。
- .KeyMap0 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[7] [6] [5] [4] [3] [2] [1] [0]のキーの番号です。
- .KeyMap1 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[;] [[] [@] [\] [^] [-] [9] [8]のキーの番号です。
- .KeyMap2 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[B] [A] [_] [/] [.] [,] []] [:]のキーの番号です。
- .KeyMap3 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[J] [I] [H] [G] [F] [E] [D] [C]のキーの番号です。
- .KeyMap4 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[R] [Q] [P] [O] [N] [M] [L] [K]のキーの番号です。
- .KeyMap5 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[Z] [Y] [X] [W] [V] [U] [T] [S]のキーの番号です。
- .KeyMap6 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[F3] [F2] [F1] [かな] [CAPS] [GRAPH] [CTRL] [SHIFT]のキーの番号です。
- .KeyMap7 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[RETURN] [SELECT] [BS] [STOP] [TAB] [ESC] [F5] [F4]のキーの番号です。
- .KeyMap8 ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
- 左から[→] [↓] [↑] [←] [DEL] [INS] [HOME] [SPACE]のキーの番号です。
- .InitData ?? ・・・・
- 起動時に1度だけ送るデータです。第一パラメータが送信するデータ数で、以後、送る順番にデータを並べます。16バイトまでです。16バイトを越えるときは2行以上にわけてください。
.InitData 09 f0 43 12 4c 00 00 7e 00 f7
.InitData 08 f0 7f 7f 04 01 00 7f f7
とすると「f0 43 12 4c 00 00 7e 00 f7 f0 7f 7f 04 01 00 7f f7」と送られます。
この項目は無理に設定しなくてもかまいません。
- .DeviceNumber ?? (00-fe , ff)
- 使用するMIDIデバイスの番号です。多分、「コントロールパネル」の「マルチメディア」の「MIDI」の「MIDI出力」の所に出ているやつで、上から 00 , 01 , ・・・・ です。
家のでは、1番上が「DS-XG MPU401 OUT」、2番目が「DS-XG Synthesizer」となっているので、2番目のデバイスを使用するために 01 を指定しています。
また、環境によっては順番がこのとおりではないことがあるそうです。気をつけてください。
無いデバイスを指定すると midiOutOpen 関数でエラーが出て終了します。ff を指定すると、OPLL をエミュレートしませんが、MIDIが無くても起動します。
- .Delay ?? (00-ff)
- 1/60秒単位でFM音源を遅らせます。
- .ReleaseRate ?? (00-01)
- リリースレートを再現するかどうかです。01 で再現します。
- .VolumeBalance ?? (00-02)
- OPLL のレジスタに渡される音量の値と実際にならす音量のバランスを設定します。00 が従来通りです。
MGS-Driver などで音量のバランスがおかしい時は 01、それ以外は 00 にしておいてください。
バランスは以下の通りです。
OPLLレジスタ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
00 での音量 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
01 での音量 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 1 | 1 | 1 | 1 | 1 |
02 での音量 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- .PitchBend ?? (00-01)
- MIDIのピッチベンドの機能を 00 で Off 、01 で On にします。
- .TuneAdjust ?? (00-ff)
- 全パートの音階を補正します。引数は符号付き8ビットで、128(10進)で半音です。
- .BankSelect ?? (00-01)
- 音色変更時にバンクセレクトを行うかどうかです。00 行わず、00 以外で行います。
- .PNoteNumber ?? ?? ?? ?? ?? (各00-7f)
- パーカッションに使用するノートナンバーです。左からハイハット、トップシンバル、タム、スネアドラム、バスドラムです。
- .PVolume ?? ?? ?? ?? ?? (各00-7f)
- 上の音に対応する音量です。
- .ProgramNumber ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? (各00-7f)
- 音色です。MIDIのプログラムナンバーを指定します。左からオリジナル音色、バイオリン、ギター、ピアノ、フルート、クラリネット、オーボエ、トランペット、オルガン、ホルン、シンセ、ハープシコード、ビブラフォン、シンセベース、ウッドベース、エレキベースです。
- .BankMSB ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? (各00-7f)
- 音色変更時に設定されるバンクセレクトの MSB です。左からオリジナル音色、バイオリン・・・・です。
- .BankLSB ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? (各00-7f)
- 音色変更時に設定されるバンクセレクトの LSB です。左からオリジナル音色、バイオリン・・・・です。
- .NoteOFS ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? (各00-ff)
- 音色ごとに音階を補正します。符号付き8ビットで(ff=-1,fe=-2....)、単位は半音です。
例えば 0c だと、その音色は普通より1オクターブ高くなります。左からオリジナル音色、バイオリン・・・・です。
- .TVolume ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? (各00-7f)
- 音色ごとの音量です。左からオリジナル音色、バイオリン・・・・です。
STOP : PageUp
SELECT : PageDown
かな : カタカナ
終了 : F12
リセット : [右Shift]+[F12]
Aドライブディスク入れ替え : F6
Bドライブディスク入れ替え : F7
状態セーブ : F9
状態ロード : F10
プレイのセーブ : [右Shift]+[F9]
プレイのロード : [右Shift]+[F10]
スクリーンショット : F8
サウンドログ : [右Shift]+[F8]
画面表示をしない/戻す : F11
ディスプレイモード切替 : 左Windows
フルスクリーン切替 : 右Windows
停止 : 有効なジョイスティックの3ボタン
このソフトを実行すると、初期設定の状況、フレームレイトなどが「fMSXSOlog.txt」というファイルに書き出されます。
初期設定時には、コンフィグファイルより読みとった数値、設定に失敗した関数、が書き出されます。
コード実行時には (1秒間に画面描画を省略した回数)/60 で、/60 とならなかった場合には、連続で15回画面描画を省略したときに、その時までにあった垂直帰線割り込みの回数、です。
0/60 が一番調子よく実行されていて、 14/15 が一番重いときです。
ディスク入れ替えでエラーが発生したときも記録されます。
このソフトの著作権はhQが所有します。
このソフトの使用によってどんなひどいことが起こっても著作者(hQ)はどんな責任も負いません。このソフトを使ってパソコンが壊れたときなどにはhQに責任をとってもらいたいと思う人はこのソフトを使用してはいけません。
起動するためには、以下のファイルが作業ディレクトリに無いといけません。
また、必ず High Color モードで使用してください。他では画面が見えません。
後は「fMSXSO.exe」を起動して「CPU」→「Start CPU」としてください。
作業ディレクトリに「cart.drc」というファイルがあればそれを読み込みます。その中に、
4E:\Emu\MSX\ROM\T&E\HYDLID31.ROM
の様にメガロムの種類・ロムイメージのパスを続けて書いてください。メガロムの種類は例によって
0 - Konami 8kB
1 - MSXDOS2 16kB
2 - Konami5 8kB
3 - Konami4 8kB
4 - ASCII 8kB
5 - ASCII 16kB
です。メガロムの種類は省略しないでください。1行目がスロット#1、2行目がスロット#2です。スロット#2のみに差したいときには1行目に何も書かずに改行して2行目に書いてください。
作業ディレクトリに「adrive.dfd」「bdrive.dfd」というファイルがあればそれを読み込みます。それぞれの中身は
E:\Emu\MSX\DSK\compile\ALESTE2A.DSK
E:\Emu\MSX\DSK\compile\ALESTE2B.DSK
E:\Emu\MSX\DSK\compile\ALESTE2C.DSK
というふうに、ディスクイメージをプルパスもしくは作業ディレクトリからの相対パスで書いておいてください。上から1番目、2番目、3番目のディスクになります。最大で40枚です。
ディスクの入れ替えは、Aドライブなら[F6]、Bドライブなら[F7]を押してからフルキーの対応するキーを押します。キーとディスクナンバーの対応は、
[1] [2]・・・・[0] がそれぞれ 1 - 10
[Q] [W]・・・・[P] がそれぞれ 11 - 20
[A] [S]・・・・[;] がそれぞれ 21 - 30
[Z] [X]・・・・[.] がそれぞれ 31 - 40
です。[ESC]でキャンセルできます。
注意することは以下のことです。
・.dfd ファイルに余分な改行を入れないこと
・拡張子が .dsk となってないと認識しません。
また、ディスク入れ替えの時に .dfd で指定したディスクイメージと同名で拡張子が .dds となっているファイルが存在すればこれを読み込みます。
.dds ファイルはセクタと同じバイト数のファイル(通常1440Bytes)で各バイトにそのセクタを読み書きしようとしたときに返すエラーコードを 00 - 0f のバイナリで書きます。0f はエラーコードではなく、正常に読み書きできることを表します。第0バイトが0セクタ、第1バイトが1セクタ・・・と対応しています。エラーコードは以下の通りです。
00 : Write protected
02 : Not ready
04 : Data (CRC) error
06 : Seek error
08 : Record not found
0a : Write fault
0c : Other errors
.dds ファイルがなければ、全て通常の読み書きがされます。
状態セーブは[F9]を押した後、フルキーの 1 - 40 を押すと出来ます。状態ロードは[F10]を押した後、フルキーの 1 - 40 を押すと出来ます。ディスクに関してはセーブ・ロードされないので、ディスクを入れ替えてからロードしてください。
- スクリーンモード 3 9 10 11 12 は表示できません
- スクリーンモード 0 1 2 3 4 5 8 はインタレース表示しません
- 1ビットサウンドポート未対応。
- マウス未対応。
- 2つのページを使用する横スクロール
- 左端8ドット非表示
- マウスカーソルが消えない
- Blaster Burn などのBGMがおそい(バグ)
- Mファンのタイトル画像をスキップすると漢字が表示されないことがある(バグ)
- たまに止まる。(勿論バグ)
- GUIでコンフィグできるようにする。
- マウスを使えるようにする。
- MIDIをもっとカスタマイズできるようにする。
- 他のスクリーンモードも対応させる。
- Marat Fayzullin氏
- ・fMSXSO は Marat Fayzullin氏の fMSX を基に作らせて貰っています。
- おかゆ倶楽部さん
- ・ウィンドウ表示のルーチンはおかゆ倶楽部さんに作ってもらいました。
・簡易ランチャ作ってもらいました。
・M・FANの文字表示で止まるバグを直してくれました。
・画面非表示、透明色のバグレポートくれました。おかげで治りました。
・あと、いつもバグ取りに熱心に協力してくれています。
- タカミチさん
- ・マニュアルを英訳してくれています。
・パレットがぐちゃぐちゃになるバグを直してくれました。
・あと、色々と情報を提供してくれています。
- 夢見翁さん
- ・スクリーンショットの所で情報頂きました。
- ・MSXSOが出来たての頃、ノートPCで動くようにするために一緒に頑張ってくれました。
- fMSXFANさん
- ・漢字BASIC対応にする方法を教えてもらいました。
- Tatsuさん
- ・スプライト+VDP(18)のバグレポートくれました。おかげで治りました。
- まつたけさん
- ・POINTのバグレポートくれました。おかげで治りました
他にもたくさんの方から動作報告や激励の言葉を頂いています。みなさんありがとうございます。
- fMSX-UNIX 2.1 (Marat Fayzullin氏)
- MSX-Datapack (ASCII)
- XG仕様書 (ヤマハ)
- SC-55mkII 取扱説明書 (Roland)
- Z80 マシン語秘伝の書 (日高徹著 哲学出版)
- Win32 API オフィシャルリファレンス (ASCII)
- DirectX7 SDK (Microsoft)
- ANSI C/C++ 辞典 (平林雅英著 共立出版)
- SCCの仕様(裕之さん http://www.mai.shiroishi.sapporo.jp/~hiroyuki/)
マシン | : | 自作 (815E + Cerelon700@945) |
コンパイラ | : | Visual C++ 6.0 Standard Edition |
音源 | : | AW744Pro |
MSX | : | MSX2+ F1XV (FDD破損) |
fMSX のホームページはhttp://www.komkon.org/fms/MSX/です。
メールは msxso@anet.ne.jp まで。
掲示板はhttp://www67.tcup.com/6719/hq.htmlです。
配布は http://www.geocities.co.jp/SiliconValley/9486/ にて。