MSXSO

Version 0.71

制作:hQ   


はじめに
動作環境
必要なもの
コンフィグファイルの書き方
コンフィグファイル MSX.cfg
コンフィグファイル OPLL.cfg
キー配置
ログファイルについて
hQが書いておいた方がよいこと
起動方法
ディスクイメージの使い方
ROMイメージの使い方
状態セーブ・ロードの使い方
バグ・対応していないこと
今後の発展につて
参考資料
制作環境
連絡先など


はじめに

 このソフトは Windows 上で動く MSX2+ のエミュレータです。MSX のエミュレータというともう多くの種類のものが出回っています。が、なぜわざわざこうして作ったとかというと、他のエミュレータで満足できなかったのと、何となく作ってみたかったのが理由です。
 このエミュレータを作るうえで一番の目的としているのが OPLL のエミュレートです。現在の所、MIDI でエミュレート出来ればいいと考えています。


動作環境

Windows98
MIDI音源
DirectX7


必要なもの

以下のロムイメージが必要です。
  MSX2P.rom
  MSX2PEXT.rom
  FMBIOS.rom
  DISK.rom
  KANJI.rom


コンフィグファイルの書き方

 このソフトは「MSX.cfg」「OPLL.cfg」の2つのファイルに必要な情報を書いておかなければおそらく起動しません。といっても、今のところややこしい設定はありませんから、安心しておいてください。
 コンフィグファイルの書き方を説明します。
 コンフィグファイルは「.」(半角ピリオド)とキャリッジリターン(つまり改行)に挟まれた部分のみを抜き出して解釈するので、ピリオドさえ使わなければ注釈分は自由です。
 書式は「.DeviceNumber 01」と、こんな感じです。注意としては、
    ・ピリオドの直後に設定名が来ること
    ・設定名は大文字と小文字を間違えずに書くこと
    ・数字は16進二桁。1桁で良くても「0」をつける
    ・改行を挟まない。
くらいですね。コンフィグの内容は全てログファイルに書き出されるので変だったら確認してみてください。
 「OPLL.cfg」の「.DeviceNumber」以外は、最初は変更しなくてもいいと思います。


コンフィグ MSX.cfg

.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 にします。。
.CheckSpite ?? (00-01)
 スプライトの衝突を検出するかどうかです。01 で検出します。
.UsePSG ?? (00-01)
 00 以外でPSGをエミュレートします。
.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のノイズのボリュームです。同上。
.Joypad1 ?? (00 - fe , ff)
 ポート1に対応するジョイスティックのデバイスナンバーです。ff を指定すると使用しません。
.Joypad2 ?? (00 - fe , ff)
 ポート2に対応するジョイスティックのデバイスナンバーです。ff を指定すると使用しません。
.UseNumpad ?? (00 - 03)
 テンキーを何に使うかを指定します。テンキーとしては使えません。
  00 : テンキーは使用しません
  01 : ポート1のジョイパッドとして使用します
  02 : ポート2のジョイパッドとして使用します
  03 : MIDIの消音に使用します
.CommandKey ?? ?? ?? ?? ?? ?? ?? ?? ??(各00-ff)
左から終了・Aドライブディスク入れ替え・Bドライブディスク入れ替え・状態セーブ・状態ロード・スクリーンショット・画面表示禁止・ディスプレイモード切替・フルスクリーン表示・デフォルト時でいう[右Shift] のキーの番号です。
数値は DirextInput のものです。分からない人は「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]のキーの番号です。

コンフィグ OPLL.cfg

.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が無くても起動します。
.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
 画面表示をしない/戻す : F11
 ディスプレイモード切替 : 左Windows
 フルスクリーン切替 : 右Windows
 パーカッション消音/戻す : テンキーの0
 チャンネル1消音/戻す : テンキーの1
 チャンネル2消音/戻す : テンキーの2
 チャンネル3消音/戻す : テンキーの3
 チャンネル4消音/戻す : テンキーの4
 チャンネル5消音/戻す : テンキーの5
 チャンネル6消音/戻す : テンキーの6
 チャンネル7消音/戻す : テンキーの7
 チャンネル8消音/戻す : テンキーの8
 チャンネル9消音/戻す : テンキーの9
 停止 : 有効なジョイスティックの3ボタン


ログファイルについて

 このソフトを実行すると、初期設定の状況、フレームレイトなどが「MSXSOlog.txt」というファイルに書き出されます。
 初期設定時には、コンフィグファイルより読みとった数値、設定に失敗した関数、が書き出されます。
 コード実行時には (1秒間に画面描画を省略した回数)/60 で、/60 とならなかった場合には、連続で15回画面描画を省略したときに、その時までにあった垂直帰線割り込みの回数、です。
 0/60 が一番調子よく実行されていて、 14/15 が一番重いときです。
 ディスク入れ替えでエラーが発生したときも記録されます。


hQが書いておいた方がよいこと

 このソフトの著作権はhQが所有します。
 このソフトの使用によってどんなひどいことが起こっても著作者(hQ)はどんな責任も負いません。このソフトを使ってパソコンが壊れたときなどにはhQに責任をとってもらいたいと思う人はこのソフトを使用してはいけません。


起動方法

 起動するためには、以下のファイルが作業ディレクトリに無いといけません。
 また、必ず High Color モードで使用してください。他では画面が見えません。

後は「MSXSO.exe」を起動して「CPU」→「Start CPU」としてください。


ROMイメージの使い方

 作業ディレクトリに「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 を押すと出来ます。ディスクに関してはセーブ・ロードされないので、ディスクを入れ替えてからロードしてください。


バグ・対応していないこと


今後の発展について

  1. SCCをエミュレートする。
  2. マウスを使えるようにする。
  3. MIDIをもっとカスタマイズできるようにする。
  4. 他のスクリーンモードも対応させる。

参考資料


制作環境

マシン:PX-98 NX あたり
コンパイラ:Visual C++ 6.0 Standard Edition
音源:AW724(YMF724が乗ったボード。当然XG)
SC-55mkII
MSX:MSX2+ F1XV (FDD破損)

連絡先など

 メールは msxso@anet.ne.jp まで。
 掲示板はhttp://www67.tcup.com/6719/hq.htmlです。
 配布は http://www.geocities.co.jp/SiliconValley/9486/ にて。
 ソースはfMSX-UNIX に依っている部分が大きいので公開していませんが、欲しい人はメールで送りますのでその旨のメールを送ってください。