目次
fMSX for Windows ver 1.10b

Original	Copyright (C) Marat Fayzullin 1994,1995

for Windows	Copyright (C) Teturo Tokuyama 1995

このプログラムはMarat Fayzullin氏が作成したMSXエミュレータをMS-Windowsに移植した物です。

 実行環境

 実行方法

 メガロムについて

 履歴

注意！

"fMSX for Windows"に関する質問・バグの報告等は私徳山哲朗にするように願いします(94i23@iees5.ieee.hokudai.ac.jp)。このプログラムによって生じた損害に関しては一切その責任を負いませんので御了承下さい。

また、商目的での配布・転載を禁止します。


メガロムについて
□メガロムについて

  以前のバージョンと違って、カートリッジの選択時にメガロムの種類を選べるようになっています。もし、うまく立ち上がらないときは選択しているメガロムの種類を変えてみて下さい。通常のロムの場合は、"Konami8 kB" を選択するようにして下さい。


□作者の戯言

  今になってＭＳＸのソフトで遊べるなんて思いもしませんでした。このようなエミュレータを作ってくれたMarat氏にはたいへん感謝しています。今回Windows3.1に移植するのは結構すんなりできました。元のソースがかなり効率よくまとまっていたおかげだと思います。とは言っても、まだ動作が不安定ですが。

  Z80のエミュレート部分を最適化するために１２０ＭＢのスワップ領域が必要でした。PC9821版を作っていたときにはZ80.cを最適化するとかなりのスピードアップになりましたがWindows版はそれほど変化が見られませんでした。画面の表示に時間を食っているのかな？

  WinGを使っていますが、WinGのビットマップをTop-Down形式で使っています。Bottom-Upのほうがパフォーマンスが高い場合、WinG本来の速度は発揮できていません。WinGに変わるAPIがWindows95から存在するようなので、開発環境が整いしだいそちらを用いたバージョンに変更するつもりです。

  MIDIを持っている人はＢＧＭがなりますが、その辺の話も少しさせてもらいましょう。

  御存じの通り（かどうかはわからないが）、MIDIでは発音する時にノートナンバーをノート・オン信号とともに送り、ノート・オフ信号で発音を止めます。一方ＭＳＸ等に内蔵されているPSG音源は発生させる音の周波数に依存した値をI/Oポートに書き込みます。PSGをMIDIでエミュレートする場合には、中途半端な音をどうするかという問題が生じます。中途半端の音というのは、たとえば『ド』と『ド＃』の間の音などのことです。そのため、MIDIで発音する場合にはノートナンバーとピッチベンドで、発生させる音を調節しています。テンポの速い曲などでは『ふにゃふにゃ』聞こえる場合があります。

  またMIDIではノート・オフ信号を送らなければ発音を止めません。しかしPSGは周波数依存のポートの値を変更するだけで即座にその音に切り替わります。もちろんPSGにもMIDIのノート・オン、オフに相当するポートがありますが、ほとんどのプログラムではいったん発音すると、ノート・オフしないで、ボリュームで音を消したり、発生させる周波数を変更する事で音程を変えているようです。

  で結局どうしたかというと、PSGの周波数依存ポート(2byte)の上位バイトと下位バイトが同じ回数アクセスされたときに、その値をチェックして以前の値と変わっていればMIDIにノート・オフ信号を送ってから新たな音程のノートナンバーとピッチの値を送り、もし同じならば何もしないようにしました。この方法だと、周波数依存ポートの上位・下位どちらか一方にしかアクセスしないで音程を変えている場合には対応することができません。他に良い方法があったら教えて下さい。

  現在のバージョンではスプライトの表示が変になるときがあります。無理してアセンブラにしたせいかな？。また縦が２１２ドットになるとはみ出ます。

  いろいろ書きましたが、『こうしたらもっと良くなる』『Z80エミュレート部分がすっっごく最適化されたアセンブラでできた』など意見やアイディアがあれば是非お知らせ下さい。


API
 "Application Program Interface"の略。DOSのシステムコールを関数にしたような物。ウインドウズのアプリケーションはAPIを呼び出すことでウインドウを作成したり、グラフィックを描画したりする。


WinG
 ウインドウズでグラフィックを高速に描画するために考案されたAPIの事。基本的な動作は、直接アクセス可能な仮想ＶＲＡＭを用意し、その内容を高速にＶＲＡＭに転送する事である。だが、速度の遅い機種ではやっぱり遅い。Windows95ではDirectDrawというWinGに似たものが用意されるようである。こっちの方はWinGよりも高速という話だ。


Win32s
 Windows3.1で動作するWindowsNTと互換性のあるAPI群で、３２ビット環境を提供するためのもの。


履歴

□履歴

ver 0.90

とりあえずウインドウズ上で動くようになった。

ver 0.95

ＭＩＤＩによるＰＳＧのエミュレート。

ver 1.00

タイトル画面をつけ、スプライトとスクリーン２をアセンブラにする。

ver 1.01

ヘルプファイルを付ける。カートリッジの読み出しの時、以前読み出したディレクトリからファイルを検索できるようにした。

ver 1.02

スクリーン５をアセンブラ化。スクリーン８の２５６色がきちんと表示されるようにした。キーの処理のバグの手直し。

ver 1.03

スプライトの表示にバグがあったのでとりあえず、元のソースに戻す。

ver 1.10b

Marat氏から1.0bのソースをもらい、そちらに変更。


実行環境

□実行環境

  実行するためにはWinGとWin32sがインストールされている必要があります。このエミュレータはかなり処理が重たいので、なるべく速いCPUを搭載している方がいいです。Pentiumクラスを推奨します。メモリもなるべくたくさんあった方がいいと思います。

  MIDI（GM規格）があればＢＧＭが流れます。（他の音源(FM,PCM)では不可。）

２５６色のパレットモードにしてください。

  MSX.ROM,MSX2.ROM等の

ＭＳＸのハードに付属しているロムのファイルはこのプログラムと同一のディレクトリに置いて下さい。

  キーリピートがあるとキーの反応が悪くなるので、

キーリピートはしないようにして下さい。

 DOS/Vの場合はキーリピートを調節するための機能がウインドウズに含まれているようですが、PC98シリーズの場合はありません。しかしPC98シリーズでもsystem.iniの[keyboard]セクションでautorepeetという項目があるのでautorepeet=offとすればキーリピートが抑制されます。

  カートリッジを実行中にスクリーンセーバーが働いてしまいます。快適に実行させたい場合は、スクリーンセーバーを使わないようにして下さい。


実行方法

□実行方法

  Fileメニューの中の"Set Cart and Option"を選択します。するとダイアログボックスが開くので、そこでカートリッジや使用するＭＳＸの種類、環境変数を決定します。

  Iperiod,Uperiod,"PeekMessage" Rateの値はそれぞれ次の意味を持っています。

Iperiod

  いくつのZ80の命令を実行したときに割り込みを発生させるか指示します。

Uperiod

  何回割り込みが発生したら画面の更新を行うか指示します。

  Uperiodの値を小さくすれば画面が頻繁に書き換えられるのでスムーズに見えますが、速度は低下します。

"PeekMessage" Rate

  いつくのZ80の命令を実行したらWindowsのPeekMessage関数を呼び出すか指示します。Windows3.1では１つのアプリケーションが制御を独占してしまうと他のアプリケーションが動作できなくなってしまいます。そのため一時的に制御を戻すために用いられるAPIがPeekMessageです。この値を大きくすると制御を独占することが長くなりエミュレータの速度の低下はありませんが他のアプリケーションやWindowsの反応が低下します。

  Fileメニューの中のRunを選択すると指定されたロムを実行します。

  Stopを選択すると現在実行しているロムを終了することができます。

  このエミュレータを終了する前に、実行中のロムを終了しなければなりません。

  ウインドウを拡大するとかなり速度が低下するので、拡大はしない方がいいです。ウインドウの大きさは任意に決めれます。小さくすれば速度は上がります。