QUASI88 - FREQUENTLY ASKED QUESTIONS - F.A.Q. とは「よく聞かれる質問集」のことですが、このドキュメントは 他の文書で説明しきれなかった部分や、現在わかっている問題点、バグ、 QUASI88 がどうやってエミュレートをしているか、などをとりとめなく まとめた、「作者が聞いて欲しい質問集」だったりします。 「それはちょっとおかしいんじゃないの?」というのがありましたら、 是非指摘のメールを下さい。 なお、ここでは UNIX版 の QUASI88 のみを対象としていますが、 ほとんどの項目は Windows/Macintosh版 でもあてはまると思います。 ------------------------------------------------------------------------------- 【目次】 ●基礎知識 Q.1-1 QUASI88 って、なんですか? Q.1-2 PC-8801 って、なんですか? ●イメージについて Q.2-1 ROMイメージやDISKイメージはどうやって入手するの? Q.2-2 初代PC-8801しか持っていないので、全てのROMイメージが揃わないのですが、 QUSAI88を動かすことは出来ますか Q.2-3 第2水準の漢字ROMを持ってないので、ROMを吸い出せない Q.2-4 P88SR.EXE 用の ROM イメージは使用できますか。 Q.2-5 M88 用の ROM イメージは使用できますか。 Q.2-6 QUASI88で表示されるフォントが実機のPC-8801と違う。 Q.2-7 「P88SR.EXE (PC8801mk-2SR emulator)」でセーブしたディスクが読めない。 Q.2-8 プロテクトにひっかかって、起動しない。 Q.2-9 どうも選択できるディスクイメージの数が少ないようだ。 ●コンパイル・起動について Q.3-1 コンパイル時に、「undefined symbols」などといったエラーが出る。 Q.3-2 起動時に、「This machine is Big-Endian.」というメッセージがでて終了して しまう。 Q.3-3 私の環境では、表示が常におかしくなる。 Q.3-4 画面表示の際になにか X がエラーを出力して落ちる。 Q.3-5 起動すると、ウインドウが現れてすぐに終了する。 Q.3-6 起動時に毎回同じオプションを指定するのはうざったい。設定ファイルなど は無いのか。 Q.3-7 [削除] Q.3-8 XFree86-DGA 機能を使用するにはどうすればいい? Q.3-9 XVideo 機能を使用するにはどうすればいい? ●キー入力について Q.4-1 ゲームを動かしてみたのだが、テンキーがきかないようだ。 ROM BASIC ではちゃんと数字の入力ができているのだが。 Q.4-2 私の使っているマシンには、カナキーがないので、カナ入力ができない。 Q.4-3 フレームスキップ数や、ボリュームを変更するショートカットキーはないの? Q.4-4 -f10 ROMAJI と指定して起動し、F10 キーを押してローマ字入力モードに 入ったが、どうも時々ローマ字入力出来なかったり、おかしな変換をする。 Q.4-5 QUASI88 を使用していると、突然特定のキーが押されっぱなしになった。 Q.4-6 [削除] Q.4-7 QUASI88 の終了後に、オートリピートが効かなくなった。 Q.4-8 メニューモードに入ると、カナやCAPSロックがクリアされてしまう。 Q.4-9 複数のキーを押下しながら起動するにはどうすればいい? Q.4-10 -record / -playback オプションはどう使うの? Q.4-11 一部、認識されないキーがある ●互換性について Q.5-1 アプリケーションが動かない Q.5-2 処理速度が遅い Q.5-3 -cpu 0 で動かないアプリケーションが、-cpu 1 では動いた。 -cpu オプションの詳細はどうなのか Q.5-4 ボーダーカラーの設定は出来ますか? Q.5-5 十分に速いマシンを使っているので、エミュレータの処理速度を速くしたい ●モニターモード Q.6-1 以前のバージョンでは、Ctrl-C を押すとモニターモードに入れたが、 現在のバージョンではそれができない。 Q.6-2 モニターモードで、Ctrl-C を押すと落ちる。 Q.6-3 モニターモードの file コマンドで現在ドライブに設定してあるファイルの 状態を変更すると、"Warning! File xxx maybe be broken! ..... continued, but not update drive status." と表示される。 Q.6-4 モニターモードにて、キーボードの押下状態を設定できますか ●サウンドについて Q.7-1 サウンドに関する種々の質問 ( 音が鳴らない、音出力が遅れる、ノイズ、オプションの意味など ) Q.7-2 [削除] Q.7-3 どうも、FM音源とPSG音源、BEEP音のバランスが違うようだ。 Q.7-4 サウンドのテンポが速い/遅い/むらがでる。 Q.7-5 マシンの処理能力の限界らしく、処理速度が遅い。サウンドのテンポも 遅くなっている。 なんとか、サウンドのテンポだけでも調整したいのだが Q.7-6 FDDのアクセスの時にサウンドが途切れるようだ。 Q.7-7 メニューから戻った後、サウンドが鳴らなくなった。 ●ステートセーブ/ロード機能について Q.8-1 ステートロードした時、ドライブにイメージがセットされない。 Q.8-2 ステートロードすると、サウンドがおかしいことがある。 Q.8-3 [削除] Q.8-4 ステートロードしたのに、音量がステートセーブ時の状態に戻らない。 Q.8-5 他のOSで動いている QUASI88 や、他のバージョンの QUASI88 とで、ステート ファイルを共有できますか? ●スクリーンスナップショット機能について Q.9-1 スクリーンスナップショット (画面キャプチャ) の方法は? Q.9-2 png 形式でスクリーンスナップショットを保存したい ------------------------------------------------------------------------------- 【基礎知識】 Q.1-1 QUASI88 って、なんですか? A.1-1 QUASI88 は、PC-8801 のエミュレータです。 UNIX + X11 にて動作します。SDL および GTK+(1.2) でも動作します。 FreeBSD(x86)で作成しましたが、Linux(x86), AIX, IRIX, solaris でも 動作報告があります。Mac OS X, MS Windows での動作報告もあります。 QUASI88 は fMSX 、XMAME、PC6001V のソースコードを参考にして、作成され ました。サウンドドライバには、MAME/XMAME のソースを使用しています。 また、FM音源エンジンとして fmgem のソースも使用しています。 ※ fMSX は、Marat Fayzullin氏作のフリーのMSXエミュレータです。 →) http://www.komkon.org/fms/ ※ MAME は、Nicola Salmoria氏作のフリーのアーケードマシンエミュレータで XMAME は、Juan Antonio Marmnez氏作の UNIX/X11 への移植です。 →) http://www.mamedev.org/ ※ PC6001V は、ゆみたろ氏作のフリーのPC6001エミュレータです。 →) http://www.papicom.net/index.html ※ fmgen は、cisc氏作のFM音源エンジンです。 →) http://retropc.net/cisc/m88/ Q.1-2 PC-8801 って、なんですか? A.1-2 NEC が、1981年〜1989年の間に製造した、8ビットパソコンです。 CPU に Z80 を使い、64KBのメインメモリを搭載、グラフィック性能は、48KB のVRAMを持ち、640x200ドット 8色、または640x400ドット 白黒という、 当時としては優れた性能を持っていました。 PC-8801 は、何度かモデルチェンジを行ない、カラー性能が512色中8色に なったり、FM音源が搭載されたりし、8ビットパソコンの人気機種として 君臨しました。が、PC-9801を始めとする16ビットパソコンの台頭に伴い、 廃れていきました。 なお、PC-8801が何かを知らない方は、PC-8801 の ROM や、ディスクの イメージの入手も不可能と思われるので、QUASI88の使用はお奨めできません。 ( Z80エミュレータとして使うのなら、ROMやディスクのイメージは不要ですが それなら専用のソフトを探す方が得策です。) 【イメージについて】 Q.2-1 ROMイメージやDISKイメージはどうやって入手するの? A.2-1 残念ながら QUASI88 の配布物には、ROMイメージやDISKイメージを入手する ツールは附属しません。各イメージのフォーマットは、附属のドキュメントで 公開しているので、根性のある人は自力でイメージを作成しましょう。 そんな根性のない、普通の人は、以下のツールを使うのが良いでしょう。 1) PC-AT機 をお持ちの場合 MS-Windowsで動く、PC88エミュレータ「M88」(cisc氏作)の配布物のなかに、 ROMとDISKのイメージの吸いだしツールが附属しています。 筆者は使ったことが無いので、詳細は不明です。各人で確認して下さい。 QUASI88 では、このツールで吸いだしたイメージをそのまま使用することが 可能です。 ●M88 の配布元 (cisc氏のウェブサイト) http://retropc.net/cisc/m88/ 2) NEC PC-98x1 をお持ちの場合 98版DOS で動く、PC88エミュレータ「P88SR.EXE (PC8801mk-2SR emulator)」 (Blue_B氏作)の配布物のなかに、ROMとDISKのイメージの吸いだしツールが 附属しています。 QUASI88 では、このツールで吸いだしたイメージをそのまま使用することが 可能です。なお、この吸いだしツールを使用するには、2HDの使えるPC-8801 か、2D の使える PC-98x1 が必要です。(いずれも、5インチFDDの扱える、 PC-98x1であることが必須)。詳細は各人で確認して下さい。 ●P88SR.EXE (PC8801mk-2SR emulator) の配布元 (Blue_B氏のウェブサイト) http://www1.plala.or.jp/aoto/pc88emu.htm 3) 「RDSK」「DSK」をお持ちの場合 「RDSK」「DSK」は、PC-8801 のディスクの内容をシリアルケーブル経由で、 PC-98x1 や PC/AT機に転送するソフトです。 これを利用すれば、フロッピーディスクを介在せずにデータの吸いだしが 可能です。なお、「RDSK」「DSK」は、現在公開が停止されいるため、 入手不能です。 注) 上記で紹介したソフトは、いずれもフリーウェアで、無保証です。 これらのソフトの使用によって被った損害などは、ソフトの作者および、 筆者は一切の責任を負いません。 ちなみに、88エミュレータ関連のツールについては、AKATTA氏のウェブサイト 88Break ( http://www.cug.net/~akatta/ ) に詳しく載っています。 Q.2-2 初代PC-8801しか持っていないので、全てのROMイメージが揃わないのですが、 QUSAI88を動かすことは出来ますか Q.2-3 第2水準の漢字ROMを持ってないので、ROMを吸い出せない A.2-2 A.2-3 QUASI88 は起動時に ROMイメージファイルを読み込みますが、この時、 必要な ROMイメージファイルが無い場合や、イメージファイルのサイズが ROM のサイズよりも小さい場合でも QUASI88 は起動します。 ( -verbose 1 を指定していれば、警告を表示します) また、フォントROMイメージファイルは無くても構いません。(Q.2-6参照) 以上より、全てのROMイメージが無くとも必要最低限のROMイメージさえ あれば、QUASI88 は起動すると思われます。正常に動作するかどうかは、 エミュレータ上で動かすアプリケーション次第、ということになります。 (なお、PC-8801/mkII の ROM で正常動作するかどうかは、未確認です) Q.2-4 P88SR.EXE 用の ROM イメージは使用できますか。 Q.2-5 M88 用の ROM イメージは使用できますか。 A.2-4 A.2-5 使用可能です。 P88SR.EXE 用の ROMイメージファイルは、すべての PC-8801のROMイメージを 専用のフォーマットでまとめて一つにしたものです。このファイルを使用する には、起動時にオプションで、 -compatrom ROMイメージファイル名 を指定すればOKです。なお、このファイルには漢字ROMイメージ、辞書ROM イメージおよび、フォントROMイメージは含まれていません。 足りないROMは必要に応じて、別途準備する必要があります。 ( 漢字ROMは、漢字を表示させなければ不要ですし、フォントROMも QUASI88 内蔵のフォントで我慢すれば不要です。辞書ROMも通常はなくても困らない でしょう。) M88 用のROMイメージファイルは、そのまま QUASI88 で使用可能です。 参考までに、M88 と QUASI88 の ROMイメージファイル名の違いは以下のとおり M88 でのファイル名 QUASI88 でのファイル名 N88.ROM N88.ROM N88_0.ROM N88EXT0.ROM N88_1.ROM N88EXT1.ROM N88_2.ROM N88EXT2.ROM N88_3.ROM N88EXT3.ROM N80.ROM N88N.ROM DISK.ROM N88SUB.ROM KANJI1.ROM N88KNJ1.ROM KANJI2.ROM N88KNJ2.ROM ファイル名の大文字小文字を区別するOSをお使いの場合、ファイル名を すべて大文字 (か、すべて小文字) にそろえておきましょう。 Q.2-6 QUASI88で表示されるフォントが実機のPC-8801と違う。 A.2-6 QUASI88 は起動時に以下の順にテキスト画面用のフォントを作成します。 1) FONT.ROM というファイルがあれば、これをフォントとして使用する。 2) FONT.ROM がなければ、 第1水準の漢字ROMイメージからフォントを 生成する。 3) FONT.ROM も 第1水準の漢字ROMイメージ もなければ、QUASI88内蔵 のフォントを使用する。 この 3) のフォントは、作者が適当に作ったものなので、PC-8801の フォントとはかなりイメージが違います。 ちゃんと FONT.ROM ないし 第1水準の漢字ROMイメージのファイルがあるか、 確認してみて下さい。 Q.2-7 「P88SR.EXE (PC8801mk-2SR emulator)」でセーブしたディスクが読めない。 A.2-7 QUASI88 のディスクイメージは、「P88SR.EXE (PC8801mk-2SR emulator)」に 準拠していますが、独自に処理を行なっているので、特殊なフォーマットなど の場合は、互換性がとれていない場合があります。 Q.2-8 プロテクトにひっかかって、起動しない。 A.2-8 DISKイメージのデータフォーマットの構造上、ある種のプロテクトフォー マットには対応できません。諦めるか、プロテクトを外すかして下さい。 例えば、不安定フォーマット、ウェーブフォーマットなど、正規の方法で コピー出来ないプロテクトはすべてエミュレート出来ないでしょう。 Q.2-9 どうも選択できるディスクイメージの数が少ないようだ。 A.2-9 途中のイメージが破損している場合、それ以降のイメージは選択することは 出来ません。また、32個以上のイメージを持つファイルの場合、32個目まで しかイメージは選択出来ません。 これらの情報は、メニューモードのディスク情報にも表記されています。 また、起動時にファイルを指定しているのであれば、オプション-verbose 1 を 指定することで、異常時には様々な警告が表示されます。 (( xxx : Set in drive 1: as read only )) …… ファイル xxx はリードオンリーで ドライブ 1: に設定され ました。書き込みは出来ません。 (( xxx : Image number over 32 )) …… ファイル xxx に含まれるイメージの数が、32個を越えて います。32個目以降のイメージを選択することは出来ません。 (( xxx : Image No. 5 Broken )) …… ファイル xxx の 5個目のイメージが壊れています。 5個目以降のイメージを選択することは出来ません。 また、カギカッコ [[ ]] で囲まれた警告が表示された場合は、致命的な エラーを意味します。この場合、ファイルがオープンされないので、 ドライブは空の状態となります。 【コンパイル・起動について】 Q.3-1 コンパイル時に、「undefined symbols」などといったエラーが出る。 A.3-1 それはリンカが必要なライブラリを見つけられなかった時に出すエラーです。 X11版の QUASI88 は、libX11.a と、libXext.a というライブラリが必要 ですので、そのライブラリのあるディレクトリを Makefile 中で指定して おきましょう。( X11LIB の行の、-L となっている部分に、 ライブラリの存在するパスを指定します。) もし、libXext.a というライブラリが無いのであれば、Makefile の 'X11_MITSHM = 1' の行をコメントアウトすれば良いでしょう。 なお、SDL版や GTK版の QUASI88 をコンパイルする場合は、それぞれの ライブラリが OSにインストールされている必要があります。 Q.3-2 起動時に、「This machine is Big-Endian.」というメッセージがでて終了して しまう。 A.3-2 エンディアンネスの設定がマシンと一致していません。Makefile の、 'X11_LSB_FIRST = 1' の行をコメントアウトして再度コンパイルして下さい。 逆に、「This machine is Little-Endian.」というメッセージが表示される 場合は、Makefile に、'X11_LSB_FIRST = 1' の行を加えて再度コンパイルして 下さい。 自分の使っているマシンのエンディアンネスがわからない場合は、とりあえず 一度コンパイルして、エラーメッセージが出れば、やり直す、という方法を 試してみて下さい。 Q.3-3 私の環境では、表示が常におかしくなる。 Q.3-4 画面表示の際になにか X がエラーを出力して落ちる。 A.3-3 A.3-4 QUASI88 では、8bpp PseudoColor 、8, 16, 32Bpp TrueColor の Xサーバでの 表示をサポートしているつもりです。これ以外の環境では、表示がおかしく なったり、エラーメッセージが出て落ちる場合があり得えます。また、作者の 怠慢により 32bpp TrueColor 以外の環境でのチェックは不十分ですので、 不具合がでるかもしれません。 Q.3-5 起動すると、ウインドウが現れてすぐに終了する。 A.3-5 おそらく、X関連でエラーが出たか、メモリの確保に失敗したのでしょう。 起動時に、-verbose 1 を指定すれば、何が原因で終了したかが、表示され ます。 Q.3-6 起動時に毎回同じオプションを指定するのはうざったい。設定ファイルなど は無いのか。 A.3-6 環境設定ファイルのファイル名は ~/.quasi88/quasi88.rc です。 この quasi88.rc の書式は、起動時のオプションの指定と全く 同じで、例えば、-v1h -4mhz と指定したいなら、 -v1h -4mhz とファイルに記述します。この時、 -v1h -4mhz # エラーが出る! と、1行に書くとエラーになります。必ず、1行に付き1オプションで、設定 してください。数値などを伴う引数の場合は、 -frameskip 10 のようになります。なお、'-frameskip' と '10' を2行に分けて書くと、 エラーになります。 1行は、255文字以下でないといけません。# 以降はコメントと見なされます。 区切りは、スペース、またはタブです。 引数にスペースや#を含めたい場合は、\ 文字でエスケープしてください。 例えば、-romdir の引数に『~/quasi88/rom and disk#1/』 というパスを 指定したければ、 -romdir ~/quasi88/rom\ and\ disk\#1/ としてください。\ そのものは、\\ で表します。 ver 0.6.3 以降をお使いの方は、 " 文字で囲む方法も使えます。この場合、 -romdir "~/quasi88/rom and disk#1/" のように指定します。" そのものは、"" の2文字で表します。 (上記のエスケープ文字は環境設定ファイルの中のみで使用可能です。 コマンドラインからの引数に対するエスケープは、シェル依存です ) また、起動時に指定したディスクイメージ名から連想される設定ファイルが 個別設定ファイルとして読み込まれます。例えば、 quasi88 diskimage.d88 として起動した場合、 ~/.quasi88/rc/diskimage.rc というファイルが 個別設定ファイルとして読み込まれます。このファイルの書式は、 quasi88.rc と同じです。 オプションや各設定ファイルにて異なる設定をした場合の優先順位ですが、 1) 起動時のオプション 2) 個別設定ファイル 3) 環境設定ファイル となります。 なお、Windows版 や Classic Mac OS版ではこれらのファイルのファイル名や ディレクトリが異なります。Windows の場合、 環境設定ファイル 基準ディレクトリ\QUASI88.ini 個別設定ファイル 基準ディレクトリ\INI\diskimage.ini などとなります。 ( 基準ディレクトリは、環境変数 QUASI88_HOME で設定されたディレクトリ、 ないし、カレントディレクトリです ) Q.3-7 [削除] A.3-7 [削除] Q.3-8 XFree86-DGA 機能を使用するにはどうすればいい? A.3-8 Makefile を編集して、コンパイルしてみて下さい。 ( どこを編集するのかは、すぐにわかると思います。 ) そして、以下のようにして QUASI88 を起動します。 # quasi88 -dga -verbose 1 起動に失敗した場合は、メッセージを確認してみてください。 なお、DGA の使用には、root権限が必要です。 さらに、DGA は十分なテストがなされていません。 (処理が手抜きなので、描画速度もいまいち……… x_x ) そもそも作者の気まぐれで実験的に実装した機能なので、DGA を使用したい 場合は、そのことを十分理解した上で、使ってください。 Q.3-9 XVideo 機能を使用するにはどうすればいい? A.3-9 Makefile を編集して、コンパイルしてみて下さい。 ( どこを編集するのかは、すぐにわかると思います。 ) そして、以下のようにして QUASI88 を起動します。 # quasi88 -xv -verbose 1 XVideo の動作に失敗した場合は、メッセージを表示して、 通常どおりに起動します。 QUASI88 は、 XVideo の RGBフォーマットにしか対応していないため、 Xサーバが、RGBフォーマットに対応していない場合は、動作しません。 というか、作者は XVideo の仕様を全く理解しないままに実装したので、 あくまで実験としてお試しください。 【キー入力について】 Q.4-1 ゲームを動かしてみたのだが、テンキーがきかないようだ。 ROM BASIC ではちゃんと数字の入力ができているのだが。 A.4-1 あなたのキーボードは、テンキーを押しても、「XK_KP_0」などの keysym を 返してこずに、「XK_0」などの keysym を返してくるのでしょう。 xev などのツールで確認してみましょう。そして、xmodmap でキーボードの 設定を適切にしましょう。 なお、上記のような (テンキーがフルキーと認識される)状態の場合は、 起動時に -tenkey オプションをつけることにより、keysym が、「XK_0」など のキーを押した時に、テンキーを押したとみなすことができます。 (但し、BASIC で " や $ などが入力できなくなるという弊害があります) QUASI88 の作動中に上記のオプションを任意に設定したい時は、メニュー モードに入り、「キー」タブにて関連する項目の設定をしましょう。 Q.4-2 私の使っているマシンには、カナキーがないので、カナ入力ができない。 Q.4-3 フレームスキップ数や、ボリュームを変更するショートカットキーはないの? A.4-2 A.4-3 起動時に、-f6 FRATE-UP と指定すれば、F6 キーを押すたびに、フレーム スキップ数が増えます。 また、-f7 KANA と指定すれば、F7 キーが カナキー の役目を果たします。 同様に、-f8、-f9、-f10 オプションを指定すれば、F8、F9、F10 キーにも さまざまな機能を割り当てることが出来ます。 以下、いくつか機能を挙げてみます。 NOWAIT … ウエイトのOFF/ON を切り替えます。 長いデモを飛ばすのに便利? IMAGE-NEXT1 … ドライブ 1 のイメージを次のイメージに変えます IMAGE-PREV1 … ドライブ 1 のイメージを前のイメージに変えます メニューモードに入らなくても、ディスク交換が 出来ます。 キーを押した時に、ディスクをイジェクトし、 キーを離した時に、ディスクを挿入するという動作 を行います。 ROMAJI … カナキー と同じ。ただし、ローマ字入力 NUMLOCK … ソフトウェア NUL LOCK。 通常の NumLockキーが使えないノートパソコンで 役にたつかも。 SNAPSHOT … スクリーンスナップショット(画面キャプチャ)を 保存します。 その他の機能は、MANUAL.TXT を参照してください。 -f6、… -f10 のオプションを指定した場合、従来のファンクションキーと しての入力は出来なくなります。 QUASI88 の処理中に F6〜F10 キーの機能を変更したい場合は、メニュー モードで変更が可能です。 起動時に -kanjikey オプションを指定した場合、以下のようになります。 F6 カナキー F7 決定キー F8 変換キー F9 全角キー f10 カナ(ローマ字入力)キー また、ver 0.6.3 以降では F6〜F10 キーに任意のキーを割り当てる ことが可能となっています。 Q.4-4 -f10 ROMAJI と指定して起動し、F10 キーを押してローマ字入力モードに 入ったが、どうも時々ローマ字入力出来なかったり、おかしな変換をする。 A.4-4 ローマ字変換は、一般的な変換方法に従って処理を行なっています。 ただし、以下のキー入力に対しては特殊な変換を行ないます。 @ → ゛ に変換 [ → ゜ に変換 / → ・ に変換 - → ー に変換 { → 「 に変換 } → 」 に変換 . → 、 に変換 , → 。 に変換 一般的でない入力、例えば la とか xo などの入力に対してのどのように 変換するかは、-romaji オプションで指定できます。 -romaji 0 を指定すると、egg に似た変換規則になります。 -romaji 1 を指定すると、MS-IME に似た変換規則になります。 -romaji 2 を指定すると、ATOK に似た変換規則になります。 なお、ローマ字入力モードでは、数字や記号のキーは押しても反応しません。 テンキー、TABなどの特殊機能キーやスペースキーは入力可能です。 ローマ字入力モードでは、ローマ字変換されたあとのカナをキーに 反映させる際に、4フレーム間キーオン、4フレーム間キーオフの状態を つくり出しています。(0.07秒間キーオン、0.07秒間キーオフと等価) キー入力の速い人は、これだと変換が間に合わずに、変換バッファの 内容が壊れるかもしれません。また、アプリケーションによっては、キー スキャンのタイミングが合わずに、いくつかの入力が無視されるかもしれ ません。こういう場合はゆっくり入力するなどの方法で回避してください。 Q.4-5 QUASI88 を使用していると、突然特定のキーが押されっぱなしになった。 A.4-5 例えば、'a' キーを押したまま、フォーカスウィンドウを QUASI88 以外の アプリケーションに変更し、そこで 'a' キーを離します。すると、QUASI88 は、'a'キーが押されたままの状態になってしまいます。 これは、QUASI88 のキースキャンが、「キーを押した」「キーを離した」の 状態遷移によって行なわれているからです。 この状態になったら、 ・押されっぱなしになったキーを再度押して離す。 ・メニューモードに入る。(カナとCAPS以外のキーが離された状態になる) ・モニターモードに入り、 set key 0xff と入力して、キー情報をすべてクリアする。 のいずれかで回避できます。 現在解決策を検討中です。(でも、RPGなんかでは経験値稼ぎができるので、 このままでもいいかも・・・^^;) Q.4-6 [削除] A.4-6 [削除] Q.4-7 QUASI88 の終了後に、オートリピートが効かなくなった。 A.4-7 QUASI88 が異常終了した場合などに、オートリピートが効かなくなることが あります。 xset r on と入力して、復帰させてください。 Q.4-8 メニューモードに入ると、カナやCAPSロックがクリアされてしまう。 A.4-8 ver 0.5.1 (ver 0.4.7) 以降では、カナとCAPSのロックはメニューモード に入ってもクリアさなくなりました。 なお、それ以外のキーの押下はすべてクリアされます。 Q.4-9 複数のキーを押下しながら起動するにはどうすればいい? A.4-9 QUASI88の起動時や、メニューモードからのリセット時に複数のキーを 押すのはかなり困難だと思われます。 なので、起動時のオプションで、 -f6 RESET などとつけてみましょう。 これで、F6 キーを押下することでリセットできますので、お望みのキー を押しながら、F6 キーを押せばいいわけです。 が、OSやマシンによっては、複数のキーの押下を認識できないものもある ようです。この場合は複数のキー押下そのものが不可能です。 この場合はメニューモードに入り、『キー』タブにある、ソフトウェア キーボードを設定しましょう。これを使えば、任意のキーを押下状態に することが可能です。 なお、PC-8801 のキーボードにはバグがあり、例えば A @ H の3個のキー を同時に押下すると、I のキーまでもが押下されていることになります。 ソフトウェアキーボードではこのバグもエミュレートしているため、 押下していないキーが押下状態になることがあります。注意ください。 また、メニューモードに入った時点で、カナとCAPS以外のキーは全て 離された状態に戻りますので注意してください。 Q.4-10 -record / -playback オプションはどう使うの? A.4-10 起動時に、-record filename と指定すると、キーの入力情報が、filename で指定したファイルに書き出されます。(正確には、VSYNC毎に キー入力の ポートの内容と、ディスクのイメージ番号がファイルに書き出されます) 次の起動時に -playback filename として、先ほどの filename を指定する と、キーの入力がそのまま再現されます。 なお、-record オプション指定時にあわせて指定した他のオプション全てを、 -playback オプション指定の際に、いっしょに指定する必要があります。 ディスクイメージファイルも同様に指定してください。これらが正しく指定 されていない場合は、正確にキー入力が再現されません。 さらに、メニューモードに入ったり、ポーズ機能を使った場合も、正確に キー入力が再現されない場合があります。なのでディスクの入れ換えは、 -f6 IMAGE-NEXT1 などと設定して、ファンクションキーにて行なうほうが 無難でしょう。 いずれにせよ、あまり検証していないオプションなので、大事なイメージ ファイルの場合は、コピーしておくなり書き込み不可にしておくなり することをお薦めします。m<__>m 追記) アプリケーションによっては、乱数のシード(初期値) に現在時刻を 使用するものがあります。こういったアプリケーションの場合、 -timestop オプションが役に立つかもしれません。 注意) このキーの入力情報を記録したファイルは、他のバージョンの QUASI88 や、他の OS で動いている QUASI88 では使用できない場合が あります。(多分、バグです) Q.4-11 一部、認識されないキーがある A.4-11 旧来のバージョンでは、一部のキーが正常に入力できないことがあります。 ver 0.6.3 以降では、キー入力のチェックの改良と、キー配置の見直しを 行いました。そのため、Windows用の日本語106キーボードでは、それなりに 正しくキー入力ができると思います。 日本語106キーボードをお使いの場合は、 -keyboard 1 オプションを指定して ください(デフォルトです)。 英語101キーボードをお使いの場合は、 -keyboard 2 オプションを指定して みてください。ただしこの場合、いくつかのキーが、キー刻印とは異なる 入力となります。( ` = | ' および 右Ctrlキー ) 作者は 英語101キーボードを持ってないので、ちゃんと動作するか不明です。 (動作報告をお待ちしております) また、オプション -keyboard 0 を指定した場合、キー設定ファイルを 読み込みます。これを使えばかなり自由にキー設定ができると思います。 キー設定ファイルのファイル名は、 ~/.quasi88/keyconf.rc です。 (Windows版では、基準ディレクトリ\KEYCONF.ini 、 Classic Mac OS版では、カレントフォルダ の KEYCONF.prefs になります) なお、この機能は X11版 および SDL版 でしか利用できません。 キー設定ファイルの書式については、一緒に配布されているファイルを参考に してみてください。(そのうち、ドキュメントを書きます・・・) 【互換性について】 Q.5-1 アプリケーションが動かない A.5-1 はっきり言って、現状ではまだまだ動かないアプリケーションが数多くあり ます。しかし、オプションを適切に設定すれば動くこともあります。 ^^^^^^^^^^^^^^^^^^ 以下に、オプションの設定方法を述べます。 -cpu … メインCPUとサブCPUの処理切替のタイミングを変更する オプションです。 n=0 で動かない時は、n=1、n=2 で試して下さい。 -fdc_wait … FDCの処理にウエイトをいれます。FDCの処理速度に依存する アプリケーションの場合、動くようになる可能性があります。 -mem_wait … メモリウェイトを入れます。が、実装が中途半端なので、 正確さは???です。 -vsync … VSYNC割り込みの周期を変更します。 デフォルトは 55.4 ですが、この値を変更すると、割り込みの タイミングが多少変化します。 Q.5-2 処理速度が遅い A.5-2 仕様です。(;_;) たしかに、低速なマシンでは処理が重いです。アクション ゲームなどでは致命的でしょう。とりあえず、オプションを適切に設定する ことで、幾分か処理速度が軽減されるので、いろいろ試してみましょう。 以下のオプションが速度に影響します。 -nowait … ウエイトをなくします。ただし、サウンドなどのテンポも おかしくなります。 -frameskip … n を大きくすれば、画面の駒落ちが激しくなる分、エミュ レーターの速度が上がります。 -skipline … 画面の表示を1ラインおきにします。 描画量が半分になるので、表示が速くなります。 -half … 画面の大きさが半分になるので、表示が速くなります。 ただし、-interp オプションを併用している場合、色補完 を行うため処理が遅くなる場合もありえます。この場合、 -nointerp オプションも指定する必要があります。 -shm … このオプションが使える場合は使った方が画面の表示が 速くなります。なお、このオプションをつけても、 エラー時は無効になったまま起動しますので、-verbose 1 を指定してエラーが表示されていないか、確認しておきま しょう。 -4mhz/-8mhz/-clock … いずれも、CPU のクロックを設定するオプションですが、 4MHz以上の速度を指定すると、処理速度がおちます。 逆に 4MHz 以下の速度を指定すると、正常に動作しない かもしれません。 -cpu … サブCPUの処理比率を変更します。 0 が一番負荷が少ないですが、アプリケーションが動か ない場合もあります。その時は、1、2 と値をふやしてみま しょう。ただし、値が大きいほど処理速度が低下します。 -fdc_wait … FDC処理の際のウエイトをいれます。 かなり処理速度が落ちるので、指定しなくても問題ない ならば、指定しないようにします。 Q.5-3 -cpu 0 で動かないアプリケーションが、-cpu 1 では動いた。 -cpu オプションの詳細はどうなのか A.5-3 PC-8801 は 本体側と、ディスクドライブ側と、合計2個のCPUを持っています。 この2個のCPUは PIO を介してつながっており、お互いでデータのやりとりを しています。 +----------+ +----------+ |本体 | | FDD | | Z80 | | Z80 | | PIO ==== PIO | +----------+ +----------+ 以下、本体側のCPUを メインCPU、ディスクドライブ側のCPUを サブCPUと呼び ます。 サブCPUは、常にPIOを監視し、メインCPUからPIOを通して、コマンドが 来るとディスクの読み書きなどを行ない、メインCPUに結果を返して、 再びメインCPUからのコマンド待ちになります。 さて、PC-8801をエミュレートするには、この2個のCPUをエミュレートする 必要があるわけですが、以上のことからわかるように、サブCPUはディスク アクセス時以外、ほとんどコマンド待ちをしているだけです。これをわざわざ エミュレートするのは資源の無駄でしょう。そこで、QUASI88 では、通常は、 メインCPUのみをエミュレートし、必要に応じてサブCPUの処理をする、という 方法をとることにしました。 具体的に説明すると、PIO には、A、B、そしてCポートと、3つのポートが あります。Aポート、Bポートは 8ビットの幅を持ち、データの送信、受信に 使われます。Cポートは、状態を相手に伝えるためのポートで、4ビットの幅を 持ち、「準備できてるから、いつでもデータを送ってね」「データを送るよ」 「データを受け取ったよ」などというフラグを送受信します。 +-------------------------------+ +------------------------------+ |本体 | | FDD | | I/O port(0FCH) Aポート _____ _____ Aポート I/O port(0FCH) | | I/O port(0FDH) Bポート _____X_____ Bポート I/O port(0FDH) | | | | | | IN port(0FEH) Cポート受信======= Cポート受信 IN port(0FEH) | | OUT port(0FFH) Cポート送信 | | Cポート送信 OUT port(0FFH) | +-------------------------------+ +------------------------------+ ということは、普通は、データの送受信の前後に、かならずCポートをみて、 相手の状態を確認する必要があります。これは、Z80 の命令でで、 『IN A,(0FEH)』になります。 ちなみに、 データの送信は、『OUT (0FCH),A』または『OUT (0FDH),A』、 データの送信は、『IN A,(0FCH)』または『IN A,(0FDH)』、 Cポートを使った フラグの送信は、『OUT (0FFH),A』 フラグの受信は、『IN A,(0FEH)』 です。 QUASI88 では、通常、片側のCPUのみをエミュレートしますが、その切替えは、 『IN A,(0FEH)』命令が出てきた直後になります。 ………(処理 1) 《エミュレートの順番》 (※)が、CPU切替のタイミング 1 メインCPU 処理 2 メインCPU 処理 3 メインCPU IN A,(0FEH) ← Cポートに「フラグ」を見にいった(※) 4 サブCPU 処理 ← CPU を変更します 5 サブCPU 処理 6 サブCPU IN A,(0FEH) ← Cポートに「フラグ」を見にいった(※) 7 メインCPU IN A,(0FEH) 8 メインCPU 処理 9 メインCPU 処理 ・ ・ こうすれば、最低限のエミュレートで済みます。(もっとも、この切替え が頻繁だと、全体的な速度が落ちることになりますが。) ところが、アプリケーションの中には、自分が送ったフラグを相手が受け 取ったかどうかを確認せずにデータの送受信を行なうものがあります。 《通常の処理》 1 OUT (0FDH),A ← まず、データをBポートに送ります 2 OUT (0FFH),A ← データを送ったことをCポートで知らせます。 … 3 IN A,(0FEH) ← 相手側が受け取ったことをCポートで確認します … 4 OUT (0FDH),A ← 次のデータをBポートに送ります … 《確認しない処理》 1 OUT (0FDH),A ← まず、データをBポートに送ります 2 OUT (0FFH),A ← データを送ったことをCポートで知らせます。 … … ← ここで別の時間がかかる処理を行ないます。 … この間に相手側はデータを受け取り終って、 … Cポートにフラグをセットし終っているはずでしょう … 4 OUT (0FDH),A ← 次のデータをBポートに送ります … 《さらに手順を省く処理》 1 OUT (0FDH),A ← まず、データをBポートに送ります … … ← ここで別の時間がかかる処理を行ないます。 … この間に相手側はデータを受け取り終って、 … Cポートにフラグをセットし終っているはずでしょう … 4 OUT (0FDH),A ← 次のデータをBポートに送ります … この対策として、メインCPU が A/B/C いずれかのポートにアクセス(読み書き) した時点から、一定時間 (実際には、4000ステップ)、メインCPU と サブCPU とを同時に処理するようにしました。 ………(処理 2) しかし、これでも対応出来ない場合があるようです。仕方がないので、どちら かのCPUを切替えて処理をするのをあきらめて、2個のCPUを同時にエミュレート することにします。 ………(処理 3) さて、-cpu オプションですが、この の値で (処理 1)〜(処理 3)の どれかが選択されます。 -cpu 0 (処理 1) -cpu 1 (処理 2) -cpu 2 (処理 3) 言い替えれば、 -cpu 0 『IN A,(0FEH)』命令で、2個のCPUを切替え -cpu 1 『IN/OUT A,(0FCH〜0FFH)』命令時点から、4000ステップの間、 2個のCPUを同時に処理 -cpu 2 常時、2個のCPUを同時に処理 ということになります。 実際の場合はどう指定すればいいのか、ですが、まずは -cpu 0 でうごかして みましょう。DISKBASIC などの行儀のいいアプリケーションは動くはずです。 それで駄目なら、-cpu 1、-cpu 2 と試していってみて下さい。 処理速度は、-cpu 0 が一番速いです。次に -cpu 1、-cpu 2 と遅くなります。 上記の方法でなにか根本的な問題がある、とかもっといい方法がある、とか いう方がおられましたら、是非、作者までメール下さい。 注意) -cpu 1, -cpu 2 でも動作しない場合、FDC の処理速度に依存している 可能性があります。つまり、フロッピーディスクのアクセスにかかる 時間を考慮してメインCPUとサブCPUで通信しているという場合です。 この場合、 -fdc_wait オプションを指定することで動作する場合が あります。(処理速度はさらに遅くなりますが) Q.5-4 ボーダーカラーの設定は出来ますか? A.5-4 -width、-height オプションでウインドウサイズを指定した場合、ボーダー 部分ができますが、このボーダーの色は、現在黒色固定です。 PC-8801(無印) では、ボーダーカラーを変更変更することが出来ることに なっていますが、QUASI88 では変更できません。 Q.5-5 十分に速いマシンを使っているので、エミュレータの処理速度を速くしたい A.5-5 最近のマシンはかなり高速なので、実機の何倍もの速さでエミュレータを 動かしてみたいことがあると思います。例えば、昔のアドベンチャーゲーム で遊ぶ場合、高速に画面描画ができたら快適でしょう。 QUASI88 はいくつかのオプションにより、高速に動かすことが可能です。 いずれのオプションでも、描画速度や計算速度がアップしますので、 アドベンチャーゲームやシミュレーションゲームが高速に動作するでしょう。 しかし、サウンドのテンポや、キー入力に問題が生じることがあります。 以下にいくつかのオプションを紹介します。 1) クロックをあげる -clock オプションを使えば、CPU クロックを変える事ができます。 実機でも PC-8801FH 以降は CPUクロックが 8MHz になって、高速化された わけですが -clock オプションで -clock 100.0 などとすれば 100MHz で 動作できます。(マシンの処理速度がついてくれば、ですが) この方法を使う場合の注意点をあげます。 ・サウンドのテンポは影響を受けません ・アプリケーションによっては、キー入力が敏感になるものがあります。 ・アクションゲームでは、クロックに依存せずに一定速度で動作するものが 多数あります (イースなど)。これらは見た目の速度が変化しません。 ・アプリケーションによっては、誤動作するものがあります。 (オプションで、-fn_max_clock 50.0 -f10 MAX-CLOCK と指定すれば F10キーを押すたびに、クロックが 50MHz ←→ 4MHz と切り替わります) 2) ウェイトを減らす。 -speed オプションで 100以上の値を指定します。 -speed 200 とすれば、 実機の 200% (2倍) の速度で動作します。 QUASI88は、実機の動作を 1秒間エミュレートしたあと、マシンの実時間にて 1秒間経過するまで待つ (ウェイトを入れる) ということを行っています。 -speed オプションは、この待ち時間を調整します。例えば、 -speed 200 が指定された場合、実機の動作を 1秒間エミュレートしたあと、マシンの 実時間で 0.5秒経過するまで待つようになります。これにより実質 200% の 速度になるわけです。 さらに、-nowait オプションを指定した場合は、この待ち時間そのものを なくすため、マシンの限界まで処理速度がアップします。 この方法を使う場合の注意点をあげます。 ・サウンドのテンポも、連動して速くなります。 ・キー入力が敏感になり、文字入力が困難になります。 ・全てのアプリケーションが高速になります。 (オプションで、-f10 nowait と指定すれば、F10キーを押すたびに、 ウェイトの有り ←→ 無し が切り替わります。また、 オプションで、-fn_max_speed 800 -f10 MAX-SPEED と指定すれば F10キーを押すたびに、速度が 800% ←→ 100% と切り替わります) 3) ブースト機能を使う -boost オプションで処理速度を上げることができます。 -boost 2 と すれば、実機の 2倍の速度で動作します。 ここでの数値は整数しか指定できません。 1.5倍のような指定は不可です。 また、全体的に処理速度がアップしますが、サウンドのテンポだけは 維持しようとします。 この方法を使う場合の注意点をあげます。 ・サウンドのテンポは影響をうけません。(例外あり。シルフィードなど) ・アプリケーションによっては、キー入力が敏感になるものがあります。 ・大抵のアクションゲームは、連動して速くなりますが、 まれに、見た目の速度が変わらないものがあります。(女神転生など) ・アプリケーションによっては、誤動作するものがあります。 (オプションで、-fn_max_boost 10 -f10 MAX-BOOST と指定すれば F10キーを押すたびに、ブーストが 10倍 ←→ 1倍 と切り替わります) 注意)ブースト機能はまだ実験中です。 サウンドにノイズが乗りやすくなります。 これらのオプションは、メニューモードの CPUタブにて、いつでも変更 可能です。なお、複数のオプションを指定するとかえって遅くなるかも しれません。 上に挙げたオプションのいくつかは、ver 0.6.3 以降で使用可能です。 【モニターモード】 Q.6-1 以前のバージョンでは、Ctrl-C を押すとモニターモードに入れたが、 現在のバージョンではそれができない。 A.6-1 モニターモードに入るには、起動時にオプション -debug をつける必要が あります。このオプションをつけないで、Ctrl-C を押すと、QUASI88 は (正常)終了します。 さらに、-debug オプションの使用には、QUASI88 のコンパイル時にモニタ モードが有効になっている必要があります。でないと、-debug オプションは 無視されます。 Q.6-2 モニターモードで、Ctrl-C を押すと落ちる。 A.6-2 IRIX と AIX でこの症状を確認しました。どうも、fgets()の挙動が、FreeBSD とは少し違うみたいです…… 回避策ですが、Makefile の、'MONITOR_IGNORE_C_D = 1' の行のコメントを 外してコンパイルすれば、とりあえず直ります。 でも逆に、FreeBSD とかの場合はこの行のコメントを外すと、モニターモード でひどいことになるので、注意しましょう。 なお、起動時に -debug オプションをつけていれば、メニューモードから、 モニターに入ることができます。 Q.6-3 モニターモードの file コマンドで現在ドライブに設定してあるファイルの 状態を変更すると、"Warning! File xxx maybe be broken! ..... continued, but not update drive status." と表示される。 A.6-3 file コマンドで、現在ドライブに設定してあるファイルの状態を変更した場合 は、ドライブの状況も同時に更新されます。 ( drive コマンドで確認してみましょう )。 ところが、このファイルがすでに壊れたイメージを含んでいる場合、 危険な状況に陥るのを避けるために、ドライブの状況は更新されません。 このメッセージは、そのことを意味しています。 ともあれ、このメッセージが出た場合、そのファイルはどこか壊れかけており 非常に危険な状態です。早急に手を打ちましょう。 なお、メニューモードでは壊れたイメージを含んでいるファイルに対しては、 状態変更が出来ないようになっています。 Q.6-4 モニターモードにて、キーボードの押下状態を設定できますか A.6-4 可能です。ただ設定がややこしいので、以下に T A G U C H I の7つの キーを押下しながら起動する例で説明してみます。(^^;) まず、これらのキーを押下した時のPC8801のでポート状態を調べる必要が あります。以下の表を見て下さい。 +----------++-----+-----+-----+-----+-----+-----+-----+-----+ | ||bit 7|bit 6|bit 5|bit 4|bit 3|bit 2|bit 1|bit 0| +----------++-----+-----+-----+-----+-----+-----+-----+-----+ | ポート 0 || 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |テンキー側 | ポート 1 || RET | . | , | = | + | * | 9 | 8 |テンキー側 | ポート 2 || G | E | F | D | C | B | A | @ | | ポート 3 || O | N | M | L | K | J | I | H | | ポート 4 || W | V | U | T | S | R | Q | P | | ポート 5 || - | ^ | ] | \ | [ | Z | Y | X | | ポート 6 || 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | | ポート 7 || _ | / | . | , | ; | : | 9 | 8 | | ポート 8 ||CTRL |SHIFT|カナ |GRPH | BS | → | ↑ | CLR | | ポート 9 ||ESC |SPACE| F5 | F4 | F3 | F2 | F1 |STOP | | ポート A ||CAPS | / | - |COPY |HELP | ← | → | TAB | | ポート B || | | | | | |DOWN | UP | | ポート C || DEL | INS | BS | F10 | F9 | F8 | F7 | F6 |FH/MH以降 | ポート D || | | | |全角 | PC |決定 |変換 |FH/MH以降 | ポート E || | | | |右SFT|左SFT|右RET|左RET|FH/MH以降 +----------++-----+-----+-----+-----+-----+-----+-----+-----+ T A G U C H I が押された時のポート状態をみてみましょう。 ポート 0 [ ] なので、 00000000 → 00 ポート 1 [ ] なので、 00000000 → 00 ポート 2 [G C A ] なので、 10001010 → 8A ポート 3 [ HI] なので、 00000011 → 03 ポート 4 [ UT ] なので、 00110000 → 30 押されたところを 1 として、16進数に直すと、上のようになります。 ところで PC-8801 には、3つのキーを押した時に、そのポート位置が 長方形の角に位置する場合、残りの角に位置するキーも押された状態に なる、というハードバグがあります。例えば、A @ H の3つのキーを押す と、I も押されたことになってしまうわけです。 なので、T A G U C H I が押された場合は、正しくは以下のようになります。 ポート 0 [ ] なので、 00000000 → 00 ポート 1 [ ] なので、 00000000 → 00 ポート 2 [G C A@] なので、 10001011 → 8B ポート 3 [O K HI] なので、 10001011 → 8B ポート 4 [ UT ] なので、 00110000 → 30 では、QUASI88 を -monitor オプションつきで起動し、モニターモードに 入りましょう。ここで、 set key ~00008B8B30 と入力してください。 ~ の後ろが、先ほど調べたポート状態です。 key_scan[0]-[15] (IN:00..0F) FF FF 74 74 CF FF FF FF FF FF FF FF FF FF FF FF と表示されたでしょうか? ( ここでは、入力した値の反転値が表示されます。) このあと、以下のコマンドでモニターを抜けます。 go これで、T A G U C H I を押しながらの起動ができるはずです。 【サウンドについて】 Q.7-1 サウンドに関する種々の質問 ( 音が鳴らない、音出力が遅れる、ノイズ、オプションの意味など ) A.7-1 サウンド関連のソースは、全て、XMAME のソースをそのまま利用しています。 ( ただし、BEEP音関連を除く。src/snddrv/quasi88/beep.c など ) サウンドに関する FAQ その他は、XMAME 附属のドキュメントが参考になる かもしれません。 サウンドについては、OS依存の話も多いので作者もよく知りません。 Q.7-2 [削除] A.7-2 [削除] Q.7-3 どうも、FM音源とPSG音源、BEEP音のバランスが違うようだ。 A.7-3 FM音源とPSG音源、BEEP音の出力レベルは、-fmvol、-psgvol、-beepvol で 設定可能です。それぞれ数値 0〜100[%]で指定します。 また、サウンドボードIIに対応している場合 (ver 0.5.0 以降) は、リズム 音源、ADPCM音源の出力レベルを、-rhythmvol、-adpcmvol で設定可能です。 これらは、FM音源の音量に対しての割合 [%] を指定することになるため、 音量は -fmvol に依存します。 これらの音量について、最適な値を見つけられた方は是非作者に教えて ください。 Q.7-4 サウンドのテンポが速い/遅い/むらがでる。 A.7-4 起動時に、オプション -nowait を指定していないか、確認しましょう。 -nowait オプションを指定している場合 このオプションを指定すると、全くウエイトを調整しません。よって、 サウンドのテンポも、マシンの処理速度に依存します。 テンポが速い場合 … -nowait オプションをはずしてみましょう。 テンポが遅い場合 … ウエイト無しでもテンポが遅いということは、 絶対的に、マシンの処理能力が足りません。 サウンドのテンポを合わせるのは難しいでしょう。 -nowait オプションを指定していない場合 このオプションを指定していない場合は、定期的にウエイトを調整します。 このウエイト調整には、gettimeofday() 関数を使用しています。が、 この関数を実装していない OS もあります。この場合は、clock() 関数を 使用することになります。 Makefile の 'X11_HAVE_GETTIMEOFDAY = 1' の行をコメントアウトする と clock() 関数を、コメントインすると gettimeofday() 関数を使用する ようになります。 さて、clock() 関数を使用する場合、その関数の仕様上、正確なウエイト をとることは不可能なので、サウンドのテンポを合わせることもできない でしょう。また、OS によっては QUASI88 の起動から、約40分経過した 時点で clock() 関数 がエラーを返すようになります。この場合、これ 以降全くウエイトが無くなってしいます。 gettimeofday() 関数を使用する場合は、そこそこ正確なウエイトを得る ことが可能です。以下、gettimeofday() 関数を使用する場合について、 解説します。 テンポが速い、又はテンポが遅い場合 -speed オプションを調整する n を 100 未満にすると、サウンドのテンポも含め、処理が遅く なります。 n を 100 より大きくすると、逆に速くなります。ただし下手に 大きくすればマシンの処理が追い付かなくなって、結局遅く なるかもしれません。 -soundclock オプションを調整する m を 4.0 以下にすると、サウンドのテンポが遅くなります。 m を 4.0 以上にすると、サウンドのテンポが速くなります。 このオプションを使った場合、サウンドのテンポのみが変わり 全体の処理速度のウエイトは変わりません。 テンポにむらがある場合 -cpu 0 、または -cpu 1 オプションを指定している場合、 ディスクアクセスのときに、サブCPUの処理がかかるため、その時 サウンドのテンポが遅くなることがあります。 ( この場合は、-subload オプションである程度回避できます ) ディスクアクセスしていないのに、テンポが遅くなる場合は、 おそらくそのマシンの処理能力がぎりぎり足りないと思われます。 特定のアプリケーションを動かした時のみ、テンポがおかしい ……QUASI88のバグです。 そのアプリケーション名と状況を連絡いただけたら幸いです。 -sleep オプションを指定している場合 ver 0.5.1 以降では、-sleep オプションをつけるとウェイトの調整時に、 selectシステムコールを使用します。この場合、CPUへの負荷が下がる 代わりにタイミングが若干遅れることがあります。 なお -nowait オプションを指定している場合は、-sleepオプションは 無効になります。 -autoskip オプションについて このオプションを指定すると、負荷が高い時に自動的に描画処理を スキップようになります。画面の書き換えが頻繁になるとサウンドのテンポ にむらがでるといった場合、このオプションをつけるとサウンドのテンポが 安定しやすくなります。 -bufnum オプションについて サウンドのノイズ軽減のために実験的につけたオプションです。 デフォルトは -bufnum 3 です。-bufnum の後ろの値は、1〜16 で設定可能 で、値を 4〜5 にすると、なんとなくノイズが減ったような気がします。^^; Q.7-5 マシンの処理能力の限界らしく、処理速度が遅い。サウンドのテンポも 遅くなっている。 なんとか、サウンドのテンポだけでも調整したいのだが A.7-5 うまくいかないとは思いますが、いくつかの方法があります。 最初の方法として -clock オプションで CPU クロックを下げてみて下さい。 -clock 3.0 とか、-clock 2.5 とかにしてみましょう。 ぎりぎり処理能力の足りないマシンの場合、うまくいくかも知れません。 全く処理能力の足りないマシンでは、無理でしょう。 次の方法として、-soundclock でサウンドのクロックを上げてみます。 通常サウンドのテンポは、サウンドタイマー割り込みを使用しますが、 このタイマーの周期の基準となるのが、このサウンドのクロックです。 具体的には、-soundclock で 4.0 以上の数値を与えます。 -soundclock 8.0 とすると、通常の倍のテンポになります。 さて、相当に処理の遅いマシンでは、この二つを組み合わせます。 例えば、-clock 1.0 -soundclock 12.0 などとやると、手元の 486DX4/66 なるCPU を積んだマシンで、かなり近いテンポでサウンドがなっています。 もっとも、聞くに耐えないほどのノイズだらけですが………。 やはり、速いマシンに変える方がよさそうです。 ちなみに、 ver 0.6.4 以降では移植元となる MAME/XMAME のバージョンが 変更されていますが、これによりさらに多くの速度とメモリが要求される ようになっています。 Makefile の 'USE_OLD_MAME_SOUND = 1' の行の コメントを外すことで、 ver 0.6.3 以前のバージョンの MAME/XMAME を 使用するようになるので、遅いマシンでは、こちらを使ってみるという 選択肢もあります。 Q.7-6 FDDのアクセスの時にサウンドが途切れるようだ。 A.7-6 -cpu 0 (デフォルト) ないし、-cpu 1 オプションを指定していると、 エミュレータが FDDアクセス処理などを行なっている時に、 サウンドの出力が途切れます。 解決策として、-cpu 2 オプションを指定します。が、これだと、 エミュレータの負荷が大きくなるので、余計にサウンドが途切れがちに なるかも知れません。 他の方法として、-subload オプションを指定します。 デフォルトは、-subload 6 ですが、これを -subload 60 とかの大きな値に すると、かなりサウンドが途切れにくくなります。それでもサウンドが 途切れる場合は、-subload 0 を指定してみて下さい。( 0 で無限大を 意味します ) これでも、サウンドが途切れる場合は、あきらめて下さい。 なお、-subload で 大きな値、あるいは 0 を指定した場合、メニューモード に入れなくなるという弊害が出ることがあります。これは、エミュレートする アプリケーションが正常に動作しない場合に発生する可能性があります。 ご注意ください。( 大抵は大丈夫なはずです ) Q.7-7 メニューから戻った後、サウンドが鳴らなくなった。 A.7-7 起動時に -close オプションをつけて起動した場合、メニューモード、 モニターモード、一時停止中のタイミングでサウンドデバイスを一旦 閉じ(close)ます。通常のエミュレートモードに戻る際に再度デバイス を開いて(open)いるのですが、ここの処理に問題があるらしく、一部の システムにおいては正しくサウンドが鳴らなくなります。( 現在のところ、 FreeBSD + SDL (OSS) の組合せでこの現象が確認されています ) -noclose オプションを指定するとメニューモードなどでもサウンド デバイスを閉じなくなるので、この現象は回避できます。 なお、ver 0.5.3 から -noclose がデフォルトになっています。 【ステートセーブ/ロード機能について】 Q.8-1 ステートロードした時、ドライブにイメージがセットされない。 A.8-1 ドライブにイメージファイルがセットされている状態でステートセーブを した場合、ステートファイルに、このイメージファイルの「ファイル名」が 記録されます。そして、ステートロード時には、この記録されたイメージ ファイルをドライブにセットします。 そのため、ステートロード時にイメージファイルが開けなかった場合は、 ドライブが空の状態で復帰します。この場合、以下のことを確認して ください。 1) イメージファイルは存在しますか? 読み込み可能ですか? 2) ステートセーブ時にイメージファイルを相対パスで指定していた場合、 ステートロード時も相対パスでイメージファイルを開こうとします。 この場合、おなじ環境で QUASI88 を起動しないといけないことに なります。 Q.8-2 ステートロードすると、サウンドがおかしいことがある。 A.8-2 仕様です。;-) 嘘です。ごめんなさい。原因はまだわかっていません。 というか、解決できないかも………。 (作者は、サウンドのことはさっぱりわからないのです。(;_;)) とくに、-sd2 オプションを指定してステートセーブした場合、 ステートロード時に異常が発生するかもしれません。 Q.8-3 [削除] A.8-3 [削除] Q.8-4 ステートロードしたのに、音量がステートセーブ時の状態に戻らない。 A.8-4 現在のところ、グラフィック・サウンド・キー・マウス関連の一部の設定 は、ステートセーブしても保存されません。なので、これらの設定は QUASI88 の起動時にコマンドラインから入力するか、メニューにて 再設定してください。 Q.8-5 他のOSで動いている QUASI88 や、他のバージョンの QUASI88 とで、ステート ファイルを共有できますか? A.8-5 ステートファイルは、同じバージョンの QUASI88 でしか利用できません。 (バージョンが異なる場合、起動時にエラーが表示されます) また、他の OS で動いている QUASI88 であっても、同じバージョンであれば ステートファイルを共有できるように作ってあるつもりですが、作者は 検証していません。(動作報告をお待ちしております) 【スクリーンスナップショット機能について】 Q.9-1 スクリーンスナップショット (画面保存) の方法は? A.9-1 メニューモードに入り、『その他』タブにあるスクリーンスナップショット (画面保存) を実行して下さい。 例えば、形式を PPM、ファイルベース名を、/usr/home/john/snap と と指定した場合、スクリーンスナップショットを実行する度に、 /usr/home/john/snap0000.ppm /usr/home/john/snap0001.ppm /usr/home/john/snap0002.ppm ……… というように通し番号が振られたファイル名のファイルが生成されます。 すでに同名のファイルがある場合は、次の通し番号でファイルを生成します。 同名のファイルでなくとも、サフィックス (拡張子) が以下のもの .ppm .xpm .png .bmp .rgb .gif .xwd .pict .tiff .tif .jpeg .jpg に置き換わったファイル名が存在すれば、同様に次の通し番号でファイルを 生成します。 スクリーンスナップショットの度にいちいちメニューモードに入るのが 面倒だという場合は、スクリーンスナップショットをファンクションキー に割り当てることが可能です。 例えば、-f6 SNAPSHOT オプションをつけて起動すれば、f6 キーを押下 することで、スクリーンスナップショットが実行できます。 Q.9-2 PNG 形式でスクリーンスナップショットを保存したい A.9-2 QUASI88 のスクリーンスナップショット機能は、残念ながら PPM と BMP の2種類の形式しかサポートしていません。なので、PNG 形式で保存したい 場合は、画像フォーマットを変換してください。Netppm などのツールが 便利でしょう。 いちいち手作業で変換するのが面倒だ、という人は スクリーンスナップ ショットの実行時に任意のコマンドを実行する機能を使いましょう。 このコマンドは、メニューモードの「その他」タブにて設定ができます。 QUASI88 は、スクリーンスナップショットの実行時に、ここで設定した コマンドを実行します。この際、%a がファイル名に、%b がファイル名 からサフィックス (拡張子) を削除したものに置き換わります。 例えば、メニューモードにて「次のコマンドを実行する」に、 pnmtopng %a > %b.png と入力しておきます。この時、スクリーンスナップショットで save0001.ppm というファイルが保存されたとすると、 pnmtopng save0001.ppm > save0001.png というコマンドが実行されます。つまりこの場合自動的に PNG 形式に 変換されるわけです。 例えば、 pnmscale 0.5 %a | pnmtopng > %b.png && rm %a と入力すれば、スクリーンスナップショットを実行する度に、「画像を 50%に縮小してPNG形式で保存し、もとのPPM形式のファイルは削除する」 ということが行なわれます。 なお、このコマンドは環境変数 QUASI88_SSS_CMD でも設定することが できます。 ※ Makefile の 'USE_SSS_CMD = 1' の行をコメントアウトして コンパイルした場合、上記で説明した「スクリーンスナップショットの 実行時に、設定したコマンドを実行する」機能そのものが使用不可と なります。