
                 QUASI88     - FREQUENTLY ASKED QUESTIONS -

						2001/12/27
						福永省三
						e-mail : fukuchan@mh1.117.ne.jp


	FAQ……というよりは、ドキュメントで説明しきれなかった部分や、
	現在わかっている問題点やバグ、QUASI88 がどうやってエミュレート
	をしているか、などについてまとめたつもりです。
	「それはちょっとおかしいんじゃないの？」というのがありましたら、
	是非指摘のメールを下さい。


【基礎知識】

Q.1-1	QUASI88 って、なんですか？
A.1-1	QUASI88 は、PC-8801 のエミュレータです。
	UNIX + X Window System の環境で動作します。
	FreeBSD(x86)で作成しましたが、Linux(x86), AIX, IRIXでも動作確認
	出来ています。

	QUASI88 は fMSX 、xmame、PC6001V のソースコードを参考にして、作成され
	ました。サウンドドライバには、mame/xmame のソースを使用しています。

	※ fMSX は、Marat Fayzullin氏作のフリーのMSXエミュレータです。
		→) http://www.komkon.org/fms/

	※ mame は、Nicola Salmoria氏作のフリーのアーケードマシンエミュレータで
	   xmame は、Juan Antonio Marmnez氏作の UNIX/X11 への移植です。
		→) http://www.mame.net
		→) http://x.mame.net

	※ PC6001V は、ゆみたろ氏作のフリーのPC6001エミュレータです。
		→) http://yumitaro.pobox.ne.jp/



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機 をお持ちの場合
	  Windows95 で動く、PC88エミュレータ「M88」(cisc氏作)の配布物のなかに、
	  ROMとDISKのイメージの吸いだしツールが附属しています。
	  筆者はPC-AT機を持っていないので詳細は不明です。各人で確認して下さい。
	  M88 付属ツールで吸い出した DISK イメージはそのまま QUASI88 で使用可能
	  です。ROM イメージも、ファイル名を変更すれば QUASI88 で使用可能です。

	  ●M88 の配布元 (cisc氏のWebPage)
	    http://www.remus.dti.ne.jp/~cisc/m88/index.html

	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氏のWebPage)
	    http://www1.plala.or.jp/aoto/pc88emu.htm

	3) 「RDSK」「DSK」をお持ちの場合
	  「RDSK」「DSK」は、PC-8801 のディスクの内容をシリアルケーブル経由で、
	  PC-98x1 や PC/AT機に転送するソフトです。
	  これを利用すれば、フロッピーディスクを介在せずにデータの吸いだしが
	  可能です。なお、「RDSK」「DSK」は、現在公開が停止されいるため、
	  入手不能です。


	注) 上記で紹介したソフトは、いずれもフリーウェアで、無保証です。
	    これらのソフトの使用によって被った損害などは、ソフトの作者および、
	    筆者は一切の責任を負いません。



Q.2-2	初代PC-8801しか持っていないので、全てのROMイメージが揃わないのですが、
	QUSAI88を動かすことは出来ますか
Q.2-3	第2水準の漢字ROMを持ってないので、ROMを吸い出せない
A.2-2
A.2-3	QUASI88 は、起動時に 環境変数 QUASI88_ROM_DIR に設定されたディレクトリ
	から、ROMイメージファイルを読み込みます。
	( この環境変数が設定されていない場合はコンパイル時に、Makefile の 
	  ROMDIR で指定したディレクトリから読み込みます。)

	この時、必要なROMが無い場合、( -verbose 1 を指定していれば、警告を
	表示して、) そのROMがあるべき場所に、0x76 の値を書き込みます。
	漢字ROMイメージが無い場合は、0xffの値を書き込みます。

	また、イメージファイルのサイズがROMのサイズよりも小さい場合は、その
	残りのROM部分を、0x76 (漢字ROMの場合は、0xff) で埋めます。

	フォントROMイメージがない場合は、第1水準の漢字ROMイメージがあればそれを
	利用します。なければ、本体内蔵のシステムフォントを使用します。

	よって、ROMイメージがなくても、QUASI88 は起動します。



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もシステム
	  内蔵のフォントで我慢すれば不要です。)

	M88 用のROMイメージファイルは、そのまま QUASI88 で使用可能です。
	ただし、ほとんどのファイルで、ファイル名が異なりますので、リネームして
	お使い下さい。

	     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



Q.2-6	フォントが実機のPC-8801と違う。
A.2-6	フォントROMのイメージがない場合、第1水準の漢字ROMイメージがあれば、
	そのイメージのフォントを使用します。しかし、漢字ROMイメージがなければ、
	QUASI88内蔵のシステムフォントが使用されます。このシステムフォントは、
	作者が適当に作ったものなので、PC-8801のフォントとはかなりイメージが
	違います。

	ちゃんとフォント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 を
	指定することで、異常時には様々な警告が表示されます。

	(( Read Only in drive 1: )) 
		…… ドライブ 1: に設定したファイルは、リードオンリーなので、
		     書き込みが出来ません。

	(( xxx : Image number over 32 ))
		…… ファイル xxx に含まれるイメージの数が、32個を越えて
		     います。32個目以降のイメージを選択することは出来ません。

	(( xxx : Image No. 5 Broken ))
		…… ファイル xxx の 5個目のイメージが壊れています。
		     5個目以降のイメージを選択することは出来ません。

	(( xxx : Image No. 9 Seek error ))
		…… ファイル xxx の 9個目のイメージでシークエラーが発生
		     しました。9個目以降のイメージを選択することは出来ません。

	また、カギカッコ [[ ]] で囲まれた警告が表示された場合は、致命的な
	エラーを意味します。この場合、ファイルがオープンされないので、
	ドライブは空の状態となります。



【コンパイル・起動について】

Q.3-1	コンパイル時に、「undefined symbols」などといったエラーが出る。
A.3-1	それはリンカが必要なライブラリを見つけられなかった時に出すエラーです。
	QUASI88 は、libX11.a と、libXext.a というライブラリが必要ですので、
	そのライブラリのあるディレクトリを Makefile 中で指定しておきましょう。
	( X11LIB の行の、-L<path> となっている部分に、ライブラリの存在するパス
	  を指定します。)

	もし、libXext.a というライブラリが無いのであれば、Makefile の 
	'MSHM = -DMITSHM' の行をコメントアウトすれば良いでしょう。

	また、モニターモードで GNU readline を使用したい場合は、Makefile の、
		'READLINE    = -DUSE_GNU_READLINE'
		'READLINELIB = -lreadline'
	の2行のコメントアウトを外さなければなりませんが、ここでも、READLINELIB
	で、GNU readline のライブラリをきちんと指定する必要があります。



Q.3-2	起動時に、「This machine is Big-Endian.」というメッセージがでて終了して
	しまう。
A.3-2	エンディアンネスの設定がマシンと一致していません。Makefile の、
	'LSB = -DLSB_FIRST' の行をコメントアウトして再度コンパイルして下さい。
	逆に、「This machine is Little-Endian.」というメッセージが表示される
	場合は、Makefile に、'LSB = -DLSB_FIRST' の行を加えて再度コンパイルして
	下さい。

	自分の使っているマシンのエンディアンネスがわからない場合は、とりあえず
	一度コンパイルして、エラーメッセージが出れば、やり直す、という方法を
	試してみて下さい。



Q.3-3	私の環境では、表示が常におかしくなる。
Q.3-4	画面表示の際になにか X がエラーを出力して落ちる。
A.3-3
A.3-4	QUASI88 では、8bpp PseudoColor 、8, 16, 32Bpp TrueColor のサーバでの
	表示をサポートしているつもりです。これ以外の環境では、表示がおかしく
	なったり、エラーメッセージが出て落ちる場合があり得えます。また、作者の
	怠慢により 16bpp TrueColor 以外の環境でのチェックは不十分ですので、
	不具合がでるかもしれません。



Q.3-5	起動すると、ウインドウが現れてすぐに終了する。
A.3-5	おそらく、X関連でエラーが出たか、メモリの確保に失敗したのでしょう。
	起動時に、-verbose 1 を指定すれば、何が原因で終了したかが、表示され
	ます。


Q.3-6	起動時に毎回同じオプションを指定するのはうざったい。環境ファイルなどに
	設定したいのだが。
A.3-6	環境設定ファイルのファイル名は  .quasi88rc で、ホームディレクトリに
	用意します。.quasi88rc の書式は、起動時のオプションの指定と全く
	同じで、例えば、-v1h -4mhz と指定したいなら、

		-v1h
		-4mhz

	とファイルに記述します。この時、

		-v1h -4mhz			# エラーが出る！

	と、1行に書くとエラーになります。必ず、1行に付き1オプションで、設定
	してください。数値などを伴う引数の場合は、

		-frameskip 10

	のようになります。なお、'-frameskip' と '10' を2行に分けて書くと、
	エラーになります。

	1行は、255文字以下でないといけません。# 以降はコメントと見なされます。
	区切りは、スペース、またはタブです。

	QUASI88 は、起動時に、環境設定ファイルの内容を読み込み、その後に
	起動オプションを処理します。つまり、環境設定ファイルでの指定と、
	オプションでの指定の両方の指定内容が設定されます。そして、
	オプションでの指定の方が優先されることになります。


[new]
Q.3-7	起動時に、毎回タイトルが画面中央に表示されて、うざったい。
A.3-7	:-(
	ver 0.4.4 から、起動時にタイトルロゴを表示するようになりました。
	タイトルロゴは約3秒で消えます。

	ロゴの表示をしたくない場合は、-nologo オプションをつけて起動して
	ください。


[new]
Q.3-8	XFree86 の DGA 機能を使用するにはどうすればいい？
A.3-8	Makefile を編集して、コンパイルしてみて下さい。
	( どこを編集するのかは、すぐにわかると思います。 )

	そして、以下のようにして QUASI88 を起動します。
	
		# quasi88 -dga -f10 DGA -verbose 1

	起動に失敗した場合は、メッセージを確認してみてください。
	起動に成功したら、その後は F10 キーにて、DGA と 通常の X を
	行き来出来ます。

	なお、DGA の使用には、root権限が必要です。
	さらに、DGA は十分なテストがなされていません。
	他にも、マウスが効かない、タイトルロゴや FDD の表示が点滅する、
	などの問題があります。
	作者の環境では、原因不明のリブートがかかったこともあります。
	(しかも、なぜか DGA を使うと描画が遅くなる……… x_x )

	まだまだ、実験的な実装なので、DGA を使用したい場合は、
	そのことを十分理解した上で、使ってください。



【キー入力について】

Q.4-1	ゲームを動かしてみたのだが、テンキーがきかないようだ。
	ROM BASIC ではちゃんと数字の入力ができているのだが。
A.4-1	あなたのキーボードは、テンキーを押しても、「XK_KP_0」などの keysym を
	返してこずに、「XK_0」などの keysym を返してくるのでしょう。
	xev などのツールで確認してみましょう。そして、xmodmap でキーボードの
	設定を適切にしましょう。

	なお、上記の質問ような状態の場合は、起動時に-tenkey オプションをつける
	ことにより、keysym が、「XK_0」などのキーを押した時に、テンキーを押した
	とみなすことができます。(この場合、BASIC で、" や $ などが入力できなく
	なるという弊害がありますが)

	QUASI88 の作動中に上記のオプションを任意に設定したい時は、メニュー
	モードに入り、「その他」タグの「キー設定」の項目を設定し直しましょう。


[new]
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       … カナキー と同じ。ただし、ローマ字入力

	その他の機能は、MANUAL を参照してください。
	-f6、… のオプションを指定した場合、従来のファンクションキーとしての
	入力は出来なくなります。

	QUASI88 の処理中に F6〜F10 キーの機能を変更したい場合は、メニュー
	モードで変更が可能です。


	なお、起動時に、-menukey や、-kanjikey オプションを指定した場合、
	以下のようになります。

		-menukey を指定した場合
			-f6  FRATE_UP
			-f7  FRATE_DOWN
			-f8  VOLUME_UP
			-f9  VOLUME_DOWN
			-f10 PAUSE
					と等価	

		-kanjikey を指定した場合
			-f6  KANA
			-f7  KETTEI
			-f8  HENKAN
			-f9  ZENKAKU
			-f10 ROMAJI
					と等価	



Q.4-4	-f10 ROMAJI と指定して起動し、F10 キーを押してローマ字入力モードに
	入ったが、どうも時々ローマ字入力出来なかったり、おかしな変換をする。
A.4-4	ローマ字変換は、一般的な変換方法に従って処理を行なっています。
	一般的な、ローマ字入力と異なる部分は、

	    nn が、ンに変換されない。 → ンの変換は、n' です。
	    例1) コンヤク は、yon'yaku です。
		konnyaku と入力すると、コンニャクと変換されます。
	    例2) アンナイ は、annai です。
		annnai と入力すると、アンンナイと変換されます。

	    xa xi xu xe xo は、 ァ ィ ゥ ェ ォ  に変換されます。
	    xya   xyu  xyo は、 ャ    ュ    ョ  に変換されます。
	    qa qi qu qe qo は、 ゛ ゜ ・ ッ ン  に変換されます。
	    -  [  ]  ,  .  は、 ー 「 」 、 。  に変換されます。

	ローマ字入力モードでは、数字や記号のキーは押しても反応しません。
	テンキーや特殊機能キーやスペースキーは入力可能です。

	ローマ字入力モードでは、ローマ字変換されたあとのカナをキーに
	反映させる際に、3フレーム間キーオン、3フレーム間キーオフの状態を
	つくり出しています。(0.05秒間キーオン、0.05秒間キーオフと等価)
	キー入力の速い人は、これだと変換が間に合わずに、変換バッファの
	内容が壊れるかもしれません。また、ソフトによっては、キースキャンの
	タイミングが合わずに、いくつかの入力が無視されるかもしれません。
	(もしそういう状態になった場合は、作者まで報告下さい)



Q.4-5	QUASI88 を使用していると、突然特定のキーが押されっぱなしになった。
A.4-5	例えば、'a' キーを押したまま、フォーカスウィンドウを QUASI88 以外の
	アプリケーションに変更し、そこで 'a' キーを離します。すると、QUASI88
	は、'a'キーが押されたままの状態になってしまいます。
	これは、QUASI88 のキースキャンが、「キーを押した」「キーを離した」の
 	状態遷移のよって行なわれているからです。

	この状態になったら、

	・押されっぱなしになったキーを再度押して離す。
	・メニューモードに入る。
	・モニターモードに入り、
	    set key 0xff
	  と入力して、キー情報をすべてクリアする。

	のいずれかで回避できます。

	現在解決策を検討中です。(でも、RPGなんかでは経験値稼ぎができるので、
	このままでもいいかも・・・^^;)



Q.4-6	F11キー を押すと、画面になにか表示される。
A.4-6	F11キー を押す度に、画面の隅に小さくFDDの状態が表示されます

	FDDの状態は、左がドライブ2、右がドライブ1 のアクセス状態です。
	また、同時に BASIC モードも表示されます。

	この表示は、F11キーを押すたびに表示されたり、消えたりします。

	    F11キー を1回押す … 画面左上に表示
	    F11キー を2回押す … 表示しない
	    F11キー を3回押す … 画面右上に表示
	    F11キー を4回押す … 表示しない
	    F11キー を5回押す … 画面左下に表示
	    F11キー を6回押す … 表示しない
	    F11キー を7回押す … 画面右下に表示
	    F11キー を8回押す … 表示しない
		以降、ボタンを押すたびに繰り返す



Q.4-7	QUASI88 の終了後に、オートリピートが効かなくなった。
A.4-7	QUASI88 が異常終了した場合などに、オートリピートが効かなくなることが
	あります。
	  xset r on
	と入力して、復帰させてください。




【互換性について】

Q.5-1	ソフトが動かない
A.5-1	はっきり言って、現状ではまだまだ動かないソフトが数多くあります。
	しかし、オプションを適切に設定すれば動くこともあります。
					    ^^^^^^^^^^^^^^^^^^
	以下に、オプションの設定方法を述べます。

	-cpu <n>   … メインCPUとサブCPUの処理切替のタイミングを変更する
		      オプションです。
		      n=0 で動かない時は、n=1、n=2、n=3 で試して下さい。
	-vsync <n> … VSYNC割り込みの周期を変更します。
		      デフォルトは 60 ですが、この値を変更すると、割り込みの
		      タイミングが多少変化します。



Q.5-2	処理速度が遅い
A.5-2	仕様です。(;_;) たしかに、低速なマシンでは処理が重いです。アクション
	ゲームなどでは致命的でしょう。とりあえず、オプションを適切に設定する
	ことで、幾分か処理速度が軽減されるので、いろいろ試してみましょう。

	以下のオプションが速度に影響します。

	-nowait        … ウエイトをなくします。ただし、サウンドなどのテンポも
			  おかしくなります。
	-frameskip <n> … n を大きくすれば、画面の駒落ちが激しくなる分、エミュ
			  レーターの速度が上がります。
	-half          … 画面の大きさが半分になれば、表示速度も軽くなり、
			  速度が上がるというわけです。
	-shm           … このオプションが使える場合は使った方が画面の表示が
			  速くなります。なお、このオプションをつけても、
			  エラー時は無効になったまま起動しますので、-verbose 1
			  を指定してエラーが表示されていないか、確認しておきま
			  しょう。
	-4mhz/-8mhz/
	-clock <n>     … いずれも、CPU のクロックを設定するオプションですが、
			  4MHz以上の速度を指定すると、処理速度がおちます。
			  逆に 4MHz 以下の速度を指定すると、正常に動作しない
			  かもしれません。
	-cpu <n>       … サブCPUの処理比率を変更します。
			  0 が一番負荷が少ないですが、ソフトが動かない場合も
			  あります。その時は、1、2、3 と値をふやしてみましょ
			  う。ただし、値が大きいほど処理速度が低下します。
	-load <n>      … メインCPU処理のウエイトを指定します。1 が最大ウエイト
			  で、値が大きくなるほど、処理が速くなり、6500程度で
			  実質ウエイトなしになります。なお、0 を指定すると、
			  全くウエイトはなくなります。このオプションは、-cpu 0
			  または -cpu 1 の時に有効です。



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 いずれかのポートにアクセス(読み書き)
	した時点から、一定時間 (実際には、255ステップ)、メインCPU と サブCPU 
	とを同時に処理するようにしました。                      ………(処理 2)

	しかし、これでも対応出来ない場合があるようです。仕方がないので、どちら
	かのCPUを切替えて処理をするのをあきらめて、2個のCPUを同時にエミュレート
	することにします。                                      ………(処理 3)
      
	さて、-cpu <n> オプションですが、この <n> の値で (処理 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)』命令時点から、255ステップの間、
		 2個のCPUを同時に処理
	  -cpu 2 常時、2個のCPUを同時に処理

	ということになります。

	実際の場合はどう指定すればいいのか、ですが、まずは -cpu 0 でうごかして
	みましょう。DISK BASIC などの、行儀のいいソフトは動くはずです。
	それで駄目なら、-cpu 1、-cpu 2 と試していってみて下さい。

	処理速度は、-cpu 0 が一番速いです。次に -cpu 1、-cpu 2 と遅くなります。

	上記の方法でなにか根本的な問題がある、とかもっといい方法がある、とか
	いう方がおられましたら、是非、作者までメール下さい。

	追記) -cpu 3 という指定も可能です。この場合の処理は、-cpu 2 と同じく、
	      2個のCPUを同時に処理していますが、『相手がデータを書いていない
	      のに、読もうとした』『相手がデータを読んでいないのに、書こうと
	      した』際、すこしの間ウエイトを置くようにします。
	      こんな回りくどい処理は必要なさそうですが、なぜか Wizardry #1 は
	      このオプションをつけないと動きません。
	      なにか相当シビアなタイミングに依存しているのでしょうか？
	      ちなみにこのオプション指定時が、処理速度は一番遅くなります。


[new]
Q.5-4	ボーダーカラーの設定は出来ますか？
A.5-4	-width、-height オプションでウインドウサイズを指定した場合、ボーダー
	部分ができますが、このボーダーの色は、現在黒色固定です。
	PC-8801(無印) では、ボーダーカラーを変更変更することが出来ることに
	なっていますが、QUASI88 では変更できません。



【モニターモード】

Q.6-1	以前のバージョンでは、Ctrl-C を押すとモニターモードに入れたが、
	現在のバージョンではそれができない。
A.6-1	モニターモードに入るには、起動時にオプション -debug をつける必要が
	あります。このオプションをつけないで、Ctrl-C を押すと、QUASI88 は
	(正常)終了します。



Q.6-2	モニターモードで、Ctrl-C を押すと落ちる。
A.6-2	IRIX と AIX でこの症状を確認しました。どうも、fgets()の挙動が、FreeBSD
	とは少し違うみたいです……

	回避策ですが、Makefile の、'IGNORE_C_D = -DIGNORE_CTRL_D' の行のコメン
	トを外してコンパイルすれば、とりあえず直ります。
	でも逆に、FreeBSD とかの場合はこの行のコメントを外すと、モニターモード
	でひどいことになるので、注意しましょう。

	なお、起動時に -debug オプションをつけていれば、メニューモードから、
	モニターに入ることができます。



Q.6-3	モニターモードの file コマンドで現在ドライブに設定してあるファイルの
	状態を変更すると、"Warning! File xxx maybe be broken! ..... continued, 
	but not update drive status." と表示される。
A.6-3	file コマンドで、現在ドライブに設定してあるファイルの状態を変更した場合
	は、ドライブの状況も同時に更新されます。
	( drive コマンドで確認してみましょう )。

	ところが、このファイルがすでに壊れたイメージを含んでいる場合、
	危険な状況に陥るのを避けるために、ドライブの状況は更新されません。
	このメッセージは、そのことを意味しています。

	ともあれ、このメッセージが出た場合、そのファイルはどこか壊れかけており
	非常に危険な状態です。早急に手を打ちましょう。

	なお、メニューモードでは壊れたイメージを含んでいるファイルに対しては、
	状態変更が出来ないようになっています。



【サウンドについて】

Q.7-1	サウンドに関する種々の質問
	( 音が鳴らない、音出力が遅れる、ノイズ、-fragsize, -numfragの意味など )
A.7-1	サウンド関連のソースは、全て、xmame のソースをそのまま利用しています。
	( ただし、BEEP音関連を除く。snddrv/beepintf.c、snddrv/beep.c など )
	サウンドに関する FAQ その他は、xmame 附属のドキュメントを参照ください。

	・音が鳴らない場合は、-verbose 1 を指定して、メッセージをよく確認して
	  ください。OS によっては、-16bit、-stereo を指定しても、8bit、モノラル
	  のサウンドしか鳴らない場合があります。

	・音の出力が遅れる場合は、-fragsize で小さな値を、ノイズが出る場合は、
	  -fragsize で大きな値を指定してみて下さい。ただし、サイズは、2の巾乗
	  (256,512,1024,2048など) に限ります。なお、これは、FreeBSD や Linux
	  に限っての話しです。

	・AIX や Solaris では、Makefile の 'S_LIN = -DFANCY_SOUND' の行を
	  コメントアウトしないと、ノイズが出るそうです。

	・一部のOSでは、Makefile の 'S_TIM = -DUSE_TIMER' の行のコメントアウト
	  を外して、タイマーベースでサウンドを動かさないと音が出ないらしいです
	  が、QUASI88 では、このタイマーベースのサウンドを移植していません。
	  この場合、サウンドはあきらめてください。

	・Linux/i386 において、いくつかの SoundBlaster AWE32 カードのドライバ
	  に問題があり、その場合はタイマーベースのサウンドで動かす必要がある
	  そうです。この場合も、QUASI88 でのサウンドはあきらめてください。



xQ.7-2	私の環境では、'S_TIM = -DUSE_TIMER' を Makefile で指定しないと、
	xmame が動かないのだが、QUASI88 ではこれがサポートされていないようだ。
A.7-2	QUASI88 では、現在、タイマーベースのサウンドはサポートされていません。
	残念ながら、サウンドを鳴らすことはあきらめてください。



Q.7-3	どうも、FM音源とPSG音源、BEEP音のバランスが違うようだ。
A.7-3	FM音源とPSG音源、BEEP音の音量バランスは、-fmvol、-psgvol、-beepvol で
	設定可能です。それぞれ数値 0〜100[%]で指定します。初期値は、-fmvol 15、
	-psgvol 10、-beepvol 10 となっています。

	最適な値を見つけられた方は、作者まで連絡下さい。



Q.7-4	サウンドのテンポが速い／遅い／むらがでる。
A.7-4	起動時に、オプション -nowait を指定していないか、確認しましょう。

	-nowait オプションを指定している場合
	  このオプションを指定すると、全くウエイトを調整しません。よって、
	  サウンドのテンポも、マシンの処理速度に依存します。

	    テンポが速い場合 … -nowait オプションをはずしてみましょう。
	    テンポが遅い場合 … ウエイト無しでもテンポが遅いということは、
				絶対的に、マシンの処理能力が足りません。
				サウンドのテンポを合わせるのは難しいでしょう。

	-nowait オプションを指定していない場合
	  このオプションを指定していない場合は、定期的にウエイトを調整します。
	    このウエイト調整には、gettimeofday() 関数を使用しています。が、
	  この関数を実装していない OS もあります。この場合は、clock() 関数を
	  使用することになります。
	    Makefile の 『GETTIMEOFDAY = -DHAVE_GETTIMEOFDAY』 の行をコメント
	  アウトすると、clock() 関数を、コメントインすると gettimeofday() 関数
	  を使用するようになります。
	  
	    さて、clock() 関数を使用する場合、その関数の仕様上、正確なウエイト
	  をとることは不可能なので、サウンドのテンポを合わせることもできない
	  でしょう。また、OS によっては QUASI88 の起動から、約40分経過した
	  時点で clock() 関数 がエラーを返すようになります。この場合、これ
	  以降全くウエイトが無くなってしいます。

	    gettimeofday() 関数を使用する場合は、そこそこ正確なウエイトを得る
	  ことが可能です。以下、gettimeofday() 関数を使用する場合について、
	  解説します。

	    テンポが速い、又はテンポが遅い場合
		-waitfreq <n> オプションを調整する
		    n を 60 以下にすると、サウンドのテンポも含め、
		    処理が遅くなります。
		    n を 60 以上にすると、逆に速くなります。ただし下手に大きく
		    すればマシンの処理が追い付かなくなって、結局遅くなるかも
		    しれません。
		-soundclock <m> オプションを調整する
		    m を 4.0 以下にすると、サウンドのテンポが遅くなります。
		    m を 4.0 以上にすると、サウンドのテンポが速くなります。
		    このオプションを使った場合、サウンドのテンポのみが変わり
		    全体の処理速度のウエイトは変わりません。

	    テンポにむらがある場合
		-cpu 0 、または -cpu 1 オプションを指定している場合、
		ディスクアクセスのときに、サブCPUの処理がかかるため、その時
		サウンドのテンポが遅くなることがあります。
		( この場合は、-subload オプションである程度回避できます )
		ディスクアクセスしていないのに、テンポが遅くなる場合は、
		おそらくそのマシンの処理能力がぎりぎり足りないと思われます。


	    特定のソフトを動かした時のみ、テンポがおかしい
		……バグです。そのソフト名と状況を連絡いただけたら幸いです。



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 を積んだマシンで、かなり近いテンポでサウンドがなっています。
	もっとも、聞くに耐えないほどのノイズだらけですが………。

	やはり、速いマシンに変える方がよさそうです。


[new]
Q.7-6	FDDのアクセスの時にサウンドが途切れるようだ。
A.7-6	-cpu 0 (デフォルト) ないし、-cpu 1 オプションを指定していると、
	エミュレータが FDDアクセス処理などを行なっている時に、
	サウンドの出力が途切れます。
	
	解決策として、-cpu 2 オプションを指定します。が、これだと、
	エミュレータの負荷が大きくなるので、余計にサウンドが途切れがちに
	なるかも知れません。

	他の方法として、-subload オプションを指定します。
	デフォルトは、-subload 6 ですが、これを -subload 60 とかの大きな値に
	すると、かなりサウンドが途切れにくくなります。それでもサウンドが
	途切れる場合は、-subload 0 を指定してみて下さい。( 0 で無限大を
	意味します )
	これでも、サウンドが途切れる場合は、あきらめて下さい。
	
	なお、-subload で 大きな値、あるいは 0 を指定した場合、F11 キーで
	FDD状態を表示しても、状態が変化しない、サブCPUの処理状態によっては、
	稀に F12 キーが効かない、などの弊害が出ます。
	(が、それほど影響はないでしょう)
