TAB:4,WIDTH:80
;===========================================
;  PC6001VW ver.3xx 
;      更新履歴
;===========================================

==============================================================================
■2016.07.29 ver 310f
	・VRAM描画の排他処理の見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	排他ブロックが外れていた箇所、および排他ブロックが入れ子になっていた
	箇所を修正。


	・mkIISRのメモリバンク選択の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	漢字ROM選択時の条件分岐で66SRしかSR扱いされていなかったため、66と同じ
	メモリマッピングされていた。
	戦士のカートリッジのRAMが割り当てられなかったのも同障害によるもの。


	・モニタモードのI/OポートにSRのパレットポート(0x40-0x43)を表示。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	一応念のため説明。
	"0x43" が13番カラーに割り当てられているパレット番号
	"0x42" が14番カラーに割り当てられているパレット番号
	"0x41" が15番カラーに割り当てられているパレット番号
	"0x40" が16番カラーに割り当てられているパレット番号


==============================================================================
■2016.07.23 ver 310e
	・128x96の画面モード描画で例外エラーが発生する不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	高さ計算に誤りがありサーフェス領域から1ラインはみ出して描画。


	・カセットテープモニタ音のボリュームが反映されていなかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	INIファイルから取り込んだテープモニタボリュームがサウンドストリームに設定
	されていなかった。


==============================================================================
■2016.07.18 ver 310d
	・サウンドストリームのウェイト処理を調整。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デバイスの種類やオプションの状態によって、意図した速度でエミュレータを
	動かすことが出来なくなっていたので、再生ポジションの監視のやり方を変更。

	スロー実行は、今まで33%,66%で調整していたけど、25%,50%になるように修正。
	この方が計算通りになる。
	固定速度実行は速度の速いPC環境ほどタイミングが合わない状態になっていたので
	ウェイトの入れ方を変更。


■2016.07.11 ver 310d
	・モニタモード移行時に例外エラーが発生する障害対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	解像度切替でテクスチャがリリースされたタイミングで画面描画が発生して、
	例外エラーが起きていた。

	Debug版だと#ifdefで各種パラメタチェックが入っているので描画のところでも
	NULLチェックで弾かれるのだけど、Release版だとそのチェックがなくなって
	思い切りヌルポアクセスをやらかしていた。


==============================================================================
■2016.07.02 ver 310c
	・VRAM描画をスクリーン転送と同期させる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	実はVRAM描画は60fpsで行っていても、それをデスクトップに転送するスクリーン
	描画のタイミングが合っていなかったりする。
	一応、スクリーン転送も60fpsでやろうとはしているけど、今は他のアプリとの
	共存が前提で排他スクリーン処理とかもやらないので、どうしても限界がある。
	結局、表示されない画面を一所懸命描画して全体で処理落ちしていても仕方が無い
	ので、VRAM描画はWindowスレッド側のスクリーン転送時に行うように修正。

	クリティカルセクションによる描画排他処理がぶつからなくなったお陰か、
	Windowsメッセージの遅延が取れてかなり軽くなったかも(^^

	まぁ、HSyncのLine描画とかに対応する必要が出てきたら、またVRAM描画位置を
	エミュレータスレッドに戻さないといけないだろうけど、実用面から考えると
	フルスロットルで出来るだけ早く動いてくれた方が嬉しい。


■2016.06.29 ver 310c
	・リセットやどこでもロードを実行したとき、一瞬、解像度と画面モードが
	合わなくなることがある不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	IOポートで画面モードが切り替わり、Direct3Dの描画サーフェスがその解像度に
	切り替わる前に、VRAM描画が走ると、一瞬、不自然な描画が行われるのに対応。
	完全に直ったかどうかは良くわからない。

	画面関係はちょっとゴチャゴチャし過ぎているので、ver400では作り直し。
	WinXpより前の古い描画デバイスに対応するための処理は全て削除する。
	DirectDrawも打ち切る予定。


■2016.06.26 ver 310c
	・戦士のカートリッジのバンク切り替えが出来なくなっていた不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	カートリッジ版ベルーガが動かなくなっていて気が付いた。
	MEGA-ROMのページを記憶するメンバ変数を変更した際の対応漏れ。


	・モニタモードから"!"コマンドで開発フォルダを開くと、エミュレータが実行に
	移行してしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Explorerは終了待機が必要ないので標準出力のパイプを作らないようにする。


■2016.06.22 ver 310c
	・CSAVEできない不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	OUT(0x93H)のポート変数書き換え位置を移動したせいで、折角立てたデータ
	受信フラグを上書きして消してしまっていた。


	・モニタモードの"ram"コマンドで拡張RAMやMEGA-RAMも出力できるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"ram"/"ram 0"でMAIN-RAM、
	"ram 1"で拡張RAM、
	"ram 2"でMEGA-RAM、
	を出力する。
	デバッグの為にメモリマップ弄って拡張RAMの全体像を見るのは非常に手間が
	かかるので…。


■2016.06.13 ver 310c
	・ウィンドウメニューから実行したときに固まる不具合対応。
	・モニタモードの"stack"命令の表示不具合対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	両方とも最適化オプションの問題。

	最適化が行われると、変数がレジスタに置き換えられる場所が出てきて、その変数
	を他所のスレッドから書き換えたとしても変数のメモリの中身が書き変わるだけで、
	処理に使われているレジスタの中身は変化せず、意図しない動きをしてしまう…
	…という、まぁ、良くある、そして非常に原因の判り難いReleaseビルドの障害。

	別スレッドに並列処理やらせて、監視側が閉じたループで動いているのがところ
	などが非常に危険な感じ。p6vwにはこれが沢山あるけど、取り急ぎ現象の発生した
	ところの変数だけ volatile 指定しておく。コンパイラの最適化を切ってしまえば
	懸念は無くなるのだけど、実行速度が遅くなるからあまりやりたくない。

	しかし、最近のVisualStudioは "_asm" も使えなくなってしまったし、
	仕事は仕事で大人数の大規模システム開発ばかりだから、
	"register"とか"volatile"とか型方識別子に気を使う習慣も無くなってしまった。
	退化してるねぇ…。


■2016.06.10 ver 310c
	・モニタモードのダンプ系コマンドのポーズボタンに[Ctrl]+[S]を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"u"、"d"、"ls" やシェル実行のログ出力など、[Ctrl]+[S]を押してもポーズが
	かかるように修正。


	・コンソールウィンドウ表示中に、シェル実行ログのログ表示を中断すると、
	エミュレータ終了時にコンソールウィンドウが閉じなくなる不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	シェルから実行された子プロセスが動き続けているとコンソールウィンドウを
	閉じることが出来なくなるので、シェル実行のパイプ処理が中断された場合は、
	子プロセスをTernminateProcess()で強制終了させる。

	例えば、"C:\" で "dir /s" なんてコマンドをシェル実行してしまうと、何十分も
	処理が続くことになり、エミュレータ終了時にも子プロセスが動き続けていたりする。
	そういう状態だと、コンソールウィンドウがデスクトップに張り付いたまま、
	子プロセス終了まで固まってしまう。


	・エミュレータメニューからDISKの新規作成が出来なくなっていた不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	どこでもセーブサムネイル対応でメディア選択ダイアログを作り直したとき、
	ディスクメディア選択時にも OFN_FILEMUSTEXIST フラグが立つようになって
	しまった。
	「セーブテープ(.p6)」「ディスク(.d88)」「どこでもセーブ(.60.62,64)」の
	メディア選択では、存在しないファイル名が指定されたときにメディアの
	新規作成になるので、OFN_FILEMUSTEXIST は必要ない。

==============================================================================
■2016.06.04 ver 310b
	・インテリジェントタイプドライブのSEND_DRIVE_STATUSコマンドの不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	複数ドライブが接続されているにもかかわらずDrive0のビットだけ立てていた。
	フラグ立て変数のビットシフト忘れ。

==============================================================================
■2016.05.10 ver 310a
	・Xp互換のオプションをONにすると、Xpでも動くという確認が取れたので、
	Xp専用のバイナリもアップロードする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ただし、Vista以前とWin7以降とはコモンコントロールの仕様が異なるので、
	バイナリの一本化は行わない。
	
	開発環境は、ついさっき、Windows10になっちゃったし～ｗｗｗ


	・mkIISRドライブタイプをmkIIの外付けドライブにも反映させる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	それに伴い、メニュー項目名も、"mkIISRドライブタイプ" から
	"mkII/SRドライブタイプ" に変更。
	どうして "外付けドライブタイプ" にしないのかと云うと、初代機とPC6001Aの
	外付けドライブはインテリジェント1D 固定だから。(今のところ)

	因みに、mkIIでノンインテリジェントタイプドライブを選択しても、FDソフトを
	起動させたり、BASIC上から使用することは出来ない。(mkIIのBIOSが使用する
	DISK_I/Oポートはインテリジェント用だから)

	一応試験としては、66用のハドソンのDISKソフトの起動メニューが出たところで
	ステータスセーブし、そのセーブデータを今度はノンインテリFDDのmkIIに
	読み込ませてゲームが起動出来るかどうか確認した。


	・エミュレータメニューのオプションダイアログの[キーボード置換]と[mkII/SR
	ドライブタイプ]が同一グループ扱いになっていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	[キーボード置換]のラジオボタンをクリックすると[mkII/SRドライブタイプ]
	の選択が外れてしまっていた。

■2016.05.10 ver 310a
	・Xp互換のオプションをONにすると、Xpでも動くという確認が取れたので、
	Xp専用バイナリのプラットホーム(ReleaseXp)を準備。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ただし、Vista以前とWin7以降とはコモンコントロールの仕様が異なるので、
	バイナリの一本化は行わない。
	
	開発環境はついさっきWindows10になってしまったしねぇ…(^^;
	
	ところで、コレ、リソースDLLをビルドするときには何か影響あるのかな？


■2016.05.09 ver 310a
	・OUT(0xC8)ポートの解像度と無関係のフラグを変更した時に解像度変更が
	行われてしまう問題が再発したのでこれを修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	改修に失敗したソースをロールバックするときにマージミスしたっぽい。
	大量マージはコワヒコワヒ。

==============================================================================
■2016.03.26 ver 310
	・システムメニューのコントロールのレイアウト調整。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	新コモンコントロール表示になってコントロール表示位置が重なってしまった
	場所のチェックと修正。
	旧コモンコントロールと新コモンコントロールだと描画サイズの異なるオブジェクト
	があるので、コントロール同士をピッタリくっつけていた場所では、フレームが
	重なってしまう所が出てくる。


■2016.03.21 ver 310
	・モニタモードバイナリダンプ窓のラベル表記間違い修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードも随分手が入ったので、細かな不具合が散見される。


■2016.02.18 ver 310
	・どこでもロードのファイル選択時の拡張子フィルタ番号を保持するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	どこでもロードのデバッグの都合上、上位互換フィルタを表示して欲しかったので
	INIファイルに出力させる。
	ただし、初代機ではセーブデータの上位互換読み込みが必要ないので、常に1固定。
	mkIIやSRのデータ読み込み時に選択された拡張子フィルタ番号を保持する。


■2016.02.16 ver 310
	・初代機のセーブデータを上位機種で読み込んだとき、VRAMアドレスの復元に
	失敗することがあったので、I/Oポートの復元順番の見直しを行う。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メモリコントローラ設定前にCRTコントロールポートが設定されないようにする。
	また、上位機種から初代機用メモリバンク設定関数が呼ばれていた不具合も修正。


■2016.01.28 ver 310
	・どこでもセーブのロード時、セットモードコントロールの復元に失敗していた
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	セットモードコントロール状態を読み込んだあと、IO_93Hを叩いていたので、
	状態が変わってしまった。
	IO_93Hはポートに送り込まずに変数に格納する。


■2016.01.27 ver 310
	・どこでもセーブデータに拡張RAMのフラグを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	初代機は拡張RAMの有り無しでVRAMアドレスが変わってくるので、セーブデータには
	必須項目の筈が、すっかり忘れていた。また、SRにも拡張RAMのオプションがある。

	上位機種から拡張RAMなしの初代機セーブデータを読み込もうとしたときは、
	警告ダイアログを出すようにする。尤も、BIOS未使用のフルマシン語プログラム
	でもない限り、大概、復元に失敗するので、そのままエラー中断してしまった方が
	親切なのかな？


	・エミュレータメニューに拡張RAMのメニューを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張RAMの試験を行うのにいちいちシステムメニューまで戻るのも手間なので、
	エミュレータメニューから有効/無効を切り替えられるようにする。


■2016.01.22 ver 310
	・機種判別が古すぎるので判断アルゴリズムの作り直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	95/98/Meとかコモンコントロールの存在とか、今更やっても仕方が無いでの、
	とりあえず、2000から10までの判定を仕込む。

	モジュール実行が可能なOSは、
	2000,Xp,2003,2003R2,Vista,2008,2008R2,7,2012,2012R2,8,8,1,10,2016
	98やMeなど、OSメジャーバージョンが5未満のものは実行させない。

	勿論、実行できたとしてもシステムデバイスの実装如何によってはエミュレータ
	システムが起動できずに異常終了する。
	プログラムビルドの対象バージョンは7以降なので、Xp辺りだとexeの実行は
	許可するけど、システムが起動できるかどうかはわからない。


	・使用するコモンコントロールをver6に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コモンコントロールver6のマニフェスト追加。
	win2kを対象外にしたのでコモンコントロールのバージョンをあげてみる。
	コントロールの見た目が変わるので、ちょっとだけ新鮮かもｗ


	・どこでもセーブのファイル選択ダイアログの表示形式をサムネイルタイプにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	どこでもセーブデータ内に内包されたスクリーンショットをエクスプローラ上で
	表示できるサムネイルプロバイダを作ったので、これを登録すれば保存したときの
	スナップショットを見ながららファイル選択できるようになる。


■2016.01.19 ver 310
	・どこでもセーブで保存した所定のパスが存在しないとき、メディアパスが
	そのディレクトリを指したままになってしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メディアファイルの移動や削除が行われた場合、一旦、現状のカレントパスと
	メディアファイル名をくっつけて存在確認を行い、それでも見つからなかったら
	ファイル名を削除してパスをカレントパスに移動させるようにする。


■2016.01.14 ver 310
	・どこでもセーブのロードを行うとき状態によってはコントロールモードが正しく
	復元されない不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	やはり、SR動作モードを跨ぐような状態遷移が鬼門だ。
	MODE6動作中にMODE2の状態を復元するとか、MODE5→MODE6を復元とか…。

	試しに上位機種で下位機種のセーブデータを読み込めるかやってみたところ、
	100%成功するわけではないが何とか動いているような感じ。
	常にBIOS内を走っているBASICなどは当然ながら失敗することがあるけど、
	フルマシン語のプログラムだと大体復元出来ると思う。
	一応、初代機とmkII以降の機種間の割込テーブル変換も行っているしので、
	BASIC起動時に設定された割込テーブルそのままに動いているマシン語ソフトも
	動いてくれると思う。たぶん。
	まぁ、余り使う機会は無いと思うけど、おまけ機能ということで…。


■2016.01.12 ver 310
	・どこでもセーブデータにサムネイル情報を埋め込む。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"THUMBNAIL"チャンクにPNG形式のファイルを埋め込む。
	PNGエンコードするのにWIC(Windows Image Companent)を使っているので、
	WIC未対応の環境(Windows Xp SP3 前)だとサムネイルが書き込まれない。

■2016.01.06 ver 310
	・SR-BIOSのインテリジェントタイプのコマンド処理にパッチを当てる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRにインテリジェント1Dドライブをマウントすると、初期化時の1D/1DD判定の
	コマンド(0x17:SET_SURFACE_MODE)がタイムアウトするまでかなり時間がかかるので
	(約15秒65536回リトライ)、リトライ回数を制限するパッチを当ててしまう。


■2016.01.04 ver 310
	・mkIISRのインテリジェント1Dドライブ対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	FDDサブシステムのサーフェスモード設定コマンドに失敗したら1Dドライブ扱いに
	なるらしいので、非対応コマンドのときは制御状態フラグの移行に失敗するように
	修正。(今までは何のコマンドが来ても処理を行わないだけで正常終了していた)

	参考までに該当箇所のコードを引用。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ;-------------------------------------------
        ;サーフェスモード設定
        ;   1Dドライブかどうかチェック
        ;   正常終了したら1DDドライブ。
        ;   エラーが出たら1Dドライブ。
        ;-------------------------------------------
        LD      A,017H          ;6FD9   3E 17
        ; コマンド出力 --->
        CALL    076C8H          ;6FDB   CD C8 76
        ; エラーチェック
        JR      C,06FEDH        ;6FDE   38 0D
        ; 次のパラメタ送信
        LD      A,0FH           ;6FE0   3E 0F
        ; OUT(0xD1) シーケンス
        CALL    076DCH          ;6FE2   CD DC 76
        ; エラーチェック
        JR      C,06FEDH        ;6FE5   38 06
        ;コマンドが正常終了した
        ;A=0  //1DDドライブ
        XOR     A               ;6FE7   AF
        ; *(IX+20) = A
        LD      (IX+20D),A      ;6FE8   DD 77 14
        JR      06FF2H          ;6FEB   18 05

        ;コマンドに失敗したときはここに飛んでくる。
        ;A=1  //1Dドライブ
Z1333:  LD      A,01H           ;6FED   3E 01
        ; *(IX+20) = A
        LD      (IX+20D),A      ;6FEF   DD 77 14

Z1332:  POP     AF              ;6FF2   F1
        OR      A               ;6FF3   B7
        JR      Z,06FF9H        ;6FF4   28 03
        POP     IX              ;6FF6   DD E1
        RET                     ;6FF8   C9
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ;-------------------------------------------
        ;コマンド出力
        ;IN: A = コマンド番号
        ;OUT: CFが立ったら失敗。
        ;-------------------------------------------
Z1334:  PUSH    AF              ;76C8   F5
        ;ATN=1
        LD      A,0FH           ;76C9   3E 0F
        OUT     (0D3H),A        ;76CB   D3 D3
        POP     AF              ;76CD   F1
        ; OUT(0xD1) 処理
        JR      076DCH          ;76CE   18 0C

        ;----- 未使用コード？
        PUSH    IX              ;76D0   DD E5
        LD      IX,0ED56H       ;76D2   DD 21 56 ED
        ; OUT(0xD1) 処理
        CALL    076DCH          ;76D6   CD DC 76
        POP     IX              ;76D9   DD E1
        RET                     ;76DB   C9
        ;------

        ;-------------------------------------------
        ; OUT(0xD1) シーケンス
        ;   パラメタ送信ではここが呼ばれる
        ;-------------------------------------------
Z1335:  PUSH    BC              ;76DC   C5
        PUSH    DE              ;76DD   D5
        PUSH    AF              ;76DE   F5
        ;タイムアウトカウンタ初期化   (D*B*C) = *(IX+18) * 65535
        LD      BC,00H          ;76DF   01 00 00
        LD      A,(IX+18D)      ;76E2   DD 7E 12
        LD      D,A             ;76E5   57
        ; タイムアウトチェック
Z1445:  CALL    077E6H          ;76E6   CD E6 77
        ;タイムアウトしていたらエラー終了へ
        JR      Z,07722H        ;76E9   28 37
        IN      A,(0D2H)        ;76EB   DB D2
        ;if (RFD==1) ?
        AND     02H             ;76ED   E6 02
        JR      Z,076E6H        ;76EF   28 F5
        ;ATN=0
        LD      A,0EH           ;76F1   3E 0E
        OUT     (0D3H),A        ;76F3   D3 D3
        POP     AF              ;76F5   F1
        PUSH    AF              ;76F6   F5
        ;--------------------------------------
        ; 0xD1ポート出力
        ;--------------------------------------
        OUT     (0D1H),A        ;76F7   D3 D1
        ;DAV=1
        LD      A,09H           ;76F9   3E 09
        OUT     (0D3H),A        ;76FB   D3 D3
        ; タイムアウトカウンタ初期化
        CALL    077F4H          ;76FD   CD F4 77
        ; タイムアウトチェック
Z1447:  CALL    077E6H          ;7700   CD E6 77
        ;タイムアウトしていたらエラー終了へ
        JR      Z,07722H        ;7703   28 1D
        IN      A,(0D2H)        ;7705   DB D2
        ;if (DAC==1) ?
        AND     04H             ;7707   E6 04
        JR      Z,07700H        ;7709   28 F5
Z1454:  LD      A,08H           ;770B   3E 08
        OUT     (0D3H),A        ;770D   D3 D3

        ; タイムアウトカウンタ初期化
        CALL    077F4H          ;770F   CD F4 77
        ; タイムアウトチェック
Z1448:  CALL    077E6H          ;7712   CD E6 77
        JR      Z,07722H        ;7715   28 0B
        IN      A,(0D2H)        ;7717   DB D2
        ;if (DAC==0) ?
        AND     04H             ;7719   E6 04
        JR      NZ,07712H       ;771B   20 F5

        ;-------------------------------------------
        ; 正常終了
        ;-------------------------------------------
Z1451:  POP     AF              ;771D   F1
        POP     DE              ;771E   D1
        POP     BC              ;771F   C1
        ; if (A != 0)
Z0700:  OR      A               ;7720   B7
        RET                     ;7721   C9

        ;-------------------------------------------
        ; エラー終了
        ;-------------------------------------------
        ;レジスタ復帰
Z1444:  POP     AF              ;7722   F1
        POP     DE              ;7723   D1
        POP     BC              ;7724   C1
        ;CFをONにする。
        SCF                     ;7725   37
        ;終了
        RET                     ;7726   C9

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ;----------------------------------------------
        ; タイムアウトチェック (D*B*C)
        ; B,C,Dが0になったら(IX+17)に0xffを出力
        ;----------------------------------------------
Z1443:  DEC     C               ;77E6   0D
        RET     NZ              ;77E7   C0
        DEC     B               ;77E8   05
        RET     NZ              ;77E9   C0
        DEC     D               ;77EA   15
        RET     NZ              ;77EB   C0
        PUSH    AF              ;77EC   F5
        LD      A,0FFH          ;77ED   3E FF
        LD      (IX+17D),A      ;77EF   DD 77 11
        POP     AF              ;77F2   F1
        RET                     ;77F3   C9
        ;----------------------------------------------
        ; タイムアウトカウンタ初期化
        ; B,C,D = 0
        ;----------------------------------------------
Z1446:  LD      D,00H           ;77F4   16 00
        LD      BC,00H          ;77F6   01 00 00
        RET                     ;77F9   C9
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



■2016.01.02 ver 310
	・mkIISRのディスク選択をノンインテリ1DD/インテリ1D/インテリ1DDに変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	mkIISRの外付けドライブはPC-6031とPC-80S31だけを想定して1Dに固定してしまった
	けど、えすびさんの解説によるとSET_MODEで1D/1DDの判別が行われるとのこと
	なので、インテリジェントタイプの方は1D/1DD両対応に変更する。
	ノンインテリの方も1D対応すべきかどうか迷ったけど、該当する製品が見当たら
	ないので今は外しておく。

■2016.01.01 ver 310
	・mkIISRでノンインテリとインテリ切替時のディスク初期化の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	というか、mkIISRでインテリジェントタイプを使用すると、BIOSからは1DD扱いで
	トラックアクセスされるのね。MODE6だけではなくて、MODE4,5でも1DDのトラック
	番号でファイルアクセスされとる。
	BASICレベルでは6601やmkIIのDISKと互換性ないのか？

	・モニタモードのTRACEコマンドを実行したとき、実行したニーモニックを
	コンソールログに出力させる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コンソールログを表示させた状態で "trace 1000" とか実行すると、コンソールの
	方に実行ログが流れるので、後ほどそのコンソールの内容をクリップボードにコピー
	してテキストエディタにでも貼り付ければ、一々 "step" 実行しないでも、
	コードの流れを追いかけることが出来る。

■2015.12.31 ver 310
	・モニタモードのEX命令の逆アセンブラ表記の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	EX命令の"(SP)"を使ったニーモニックは、"EX HL,(SP)" のように "(SP)" を後ろに
	表示していたが、実際は "EX (SP),HL" が正しいという指摘を受けたので、
	これを修正。

■2015.12.30 ver 310
	・インテリジェンスドライブのデータリードコマンドの不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ver309でDISK関連のソースコード整理を行った時、不要な所にbreakを仕込んで
	しまった為に、データの最初の1バイトの取りこぼしが起きていた。


■2015.12.28 ver 310
	・特殊D88ディスクに対応していたときの是正処理が残っていたので、これを削除。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	特殊なディスクを読めるようにして、正常ディスクで問題が起こっては意味が無い
	のでこの辺りの対応はサポート外にしたつもりだったけど、まだ残ってたー(^^;

	・Releaseビルドの最適化オプションを無効にする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	最適化ビルドするとDISKイメージが読めなくなる。これはVS2013だけの現象。
	原因不明。VS2010だと問題無いようだが？


■2015.12.27 ver 310
	・DISKドライブタイプ、DISKメディアタイプを画面に表示する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	mkIISRでインテリ・ノンインテリの切替に対応したのは良いが、現在のFDDは
	1Dドライブなのか1DDドライブなのか良くわからない状況になってしまうので、
	ファンクションガイドの所にドライブタイプのアイコン表示を追加してみる。
	知りたい情報は1D/1DDの判別だけど、一応、インテリとノンインテリの区別も
	つくようにしておく。
	ついでに、ディスクイメージのファイル名の所にディスクのフォーマット形式も
	表示させるようにする。


■2015.12.24 ver 310
	・D88ヘッダのディスクファイル名が空のとき、DSK to D88変換が行われていた
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	文字列処理のリファクタリングのときに発生したデグレ。


	・インテリジェントドライブの高速データ転送対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	mkIISRのFDDを外付けドライブにすると、高速ハンドシェイクが行われていて、
	正常にデータリードできない状態になっていたので、FDDのフラグ処理を修正。
	DACとかDAVとか…。


■2015.12.23 ver 310
	・mkIISRのドライブタイプの選択を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ドライブのインテリジェント・ノンインテリジェント切替をシステムメニューから
	行えるようにする。
	インテリジェントドライブ用のソフトは6601用のソフトを動かして確認できたけど、
	ノンインテリ対応のソフトは所有していないので動作確認は出来ていない。
	というか、ノンインテリ専用のソフトって存在するの？
	とりあえず、現時点ではえすびさん作のP6機種確認ソフトでチェックしただけ。


■2015.12.09 ver 310
	・どこでもセーブの作り直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	保存形式を単純なシリアライズからチャンク形式に変更。
	今までは初代機でセーブしたデータはmkIIやSRでは読めなかったが、これからは
	上位互換として読めるようになる…(はず)。
	もちろんSRのデータはmkIIや60では読めない。


■2015.12.07 ver 310
	・どこでもセーブのフォーマット変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	パス情報のサイズ変更に伴い、異常系処理を強化。
	セーブデータのリビジョン情報も保持する。
	リビジョン情報が違っていた場合、軽微なバージョン差異だったらデータの是正、
	大幅な変更があったら復元エラーにする。
	とはいえ、作り直しの伴わない変更というのはほとんど無いような気もする…。
	セーブデータをXML化できたら各エミュで最小限の互換性は取れるようになるかも
	知れないけど、RAMイメージとか16進数テキストでバリバリ出すと凄い大きさに
	なりそう。バイナリのチャンク形式が妥当かな？


■2015.12.04 ver 310
	・各種パス設定の見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	プログラム内部で相対パスと絶対パスが混在している状態だったので、
	全て絶対パスに統一する。
	エミュレータモジュールは相対パス対応の為に常にカレントディレクトリを
	モジュールディレクトリに固定しておく必要があったのだが、
	モニタモードのシェル実行で色々出来るようにしてしまったので、カレント
	ディレクトリが固定されたままだと色々と不都合が起きるようになってきた。
	そこで、開発ディレクトリ＝カレントディレクトリという扱いにして、
	ROMや画像・音声などのリソースファイルは絶対パスでアクセスする。
	
	作り直し箇所はファイルの読み書きのところ。
	リファクタリング範囲はソース全般。grepかけたら700行以上引っかかった…(^^;
	
	オプションで指定されたパスは相対パスか絶対パスか判断できないので、
	一旦、指定パスに移動してみて、移動出来たらカレントパスを取得、
	出来なかったらデフォルトパスを設定する。


■2015.12.03 ver 310
	・簡易UNIXコマンドに"more"を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードのデバッグをやっているとき、結構頻繁に"! type ****" を
	使っていたので、取り急ぎ"more"コマンドを実装。
	"! "を入力する手間が省けるだけといえばそれだけなんだけど、意外と
	"!" + " " の入力は手間なので(一連の左手作業だし)、省略できればそれに
	越したことはないよね。
	
	最近、シェル実行"!"コマンド自体 廃止しても良いような気がしてきたけど、
	モニタモードコマンドとシェルコマンドで名前が被っているものもあるので、
	安全性の面から明示的に"!"を入力してもらった方が良いのかも知れない。
	
	因みに、一般的にUNIXやLinuxでテキストを見たいときは"vi"とか"less"を
	使うと思うけど、"vi"はエディタだし、"less"だとカーソルでスクロール
	させる事が要求されているような気がするので、"more"！

	まぁ、実際、"more"なんてWindowsやDOSのコンソールのパイプ処理でしか
	使ったことが無いので、本来、勝手に手が動くとすれば"type"なのだけど、
	一応、UNIXシェルのコマンドに合わせているので、"more"！
	
	………しかし、実は"type"でも受け付けるようにしてある。


■2015.11.28 ver 310
	・I/OポートB0Hのリレー状態変更に失敗する不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ver309のとき、テクノウを読みながらSRのI/Oポート制御ロジックを整理する
	修正を行ったのだけど、その時、特定条件のフラグ組み合わせに対応させて
	いた部分を不要なifと判断して消してしまった。
	
	同様のデグレが起きていたのはB0HとC8H,C9Hポートで、不具合はB0Hのみ。
	C8H,C9Hの方はSRのBASIC実行中に無駄なフラグ処理が繰り返し走り続ける
	だけなので問題は無かったとはいえ、フラグ変更ログが大量に吐き出されて
	いるので、パフォーマンスの面では足を引っ張っているような気がする。


■2015.11.24 ver 310
	・SRグラフィックモードの640x200解像度切り替えの不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	一度、640x200の解像度で表示された後、320x200の解像度に移行すると、
	再び40x200の解像度が表示できない状態になっていた。
	原因はC8Hポートのスクリーン解像度変更検知ビットの設定抜け。


	・SRで裏表があるディスクを読めるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	一度無効にしたけど、読めたほうが都合が良いような気がするので再び対応。

	アクセストラックとテーブルの関係はこうなる。
	+-------------------------------------------------------+
	| SR (1DD-DRIVE)                                        |
	+------+------+------+------+------+------+------+------+
	|Access| 1D   |Access|  2D  |Access| 1DD  |Access| 2DD  |
	|Track |Table |Track |Table |Track |Table |Track |Table |
	+------+------+------+------+------+------+------+------+
	|     0|     0|     0|     0|     0|     0|     0|     0|
	|      |      |      |      |      |      |     1|     1|
	|      |      |      |     1|     1|     2|     2|     2|
	|      |      |      |      |      |      |     3|     3|
	|     2|     2|     2|     2|     2|     4|     4|     4|
	|      |      |      |      |      |      |     5|     5|
	|      |      |      |     3|     3|     6|     6|     6|
	|      |      |      |      |      |      |     7|     7|
	|     4|     4|     4|     4|     4|     8|     8|     8|
	|      |      |      |      |      |      |     9|     9|
	|      |      |      |     5|     5|    10|    10|    10|
	|      |      |      |      |      |      |    11|    11|
	|     6|     6|     6|     6|     6|    12|    12|    12|
	|      |      |      |      |      |      |    13|    13|
	|      |      |      |     7|     7|    14|    14|    14|
	|      |      |      |      |      |      |    15|    15|
	|     8|     8|     8|     8|     8|    16|    16|    16|
	|     :|     :|     :|     :|     :|     :|     :|     :|
	+------+------+------+------+------+------+------+------+
	|      x1     |      x1     |      x2     |      x1     |
	+-------------+-------------+-------------+-------------+

■2015.11.20 ver 310
	・DirectInputのAcquire処理を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デバッグ実行で一度でもブレークポイントに掛かると、以降、二度とキー入力の
	ハンドラが飛んで来なくなる状況が発生するので、処理順番を修正。
	頻度は減ったけど依然症状は直らず。
	これは、デバッグ作業するときに困るだけで、リリース版を実行する分には
	何の問題もないのだけど、気持ちが悪いことに変わりは無い。
	
	しっかし、Vista以降 DirectInputの挙動は少しおかしいような気がするなぁ。


	・モニタモードからシェル実行したときデバイスロストする不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	プログラムスレッドとメッセージスレッドが、同時に描画デバイスにアクセス
	したとき、クリティカルセクションの隙間でデバイスエラーが発生して、
	デバイスロスト扱いでシステムが停止していた。
	完全に穴を埋めることは難しいので、発生したときにエラーコードの内容を
	見て処理分けする。今後、現象が発生した場合、サーフェスが初期化されて
	一時的に画面が真っ黒になるけど、処理自体は継続されるはず。


	・BITMAPマッピング機能の追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	バイナリエディタの所にメモリのビットマップイメージを表示する機能。
	
	随分前に試しに作ってはみたものの、16バイトピッチのモノクロ表示だけでは
	余り使い道がなさそうなのでデバッグ版にしか実装していなかったのだけど、
	今回、描画モードとラインピッチの変更に対応したのでリリース版でも有効に
	してみた。
	VRAMとかグラフィックデータの確認に利用できる……と思う…(自信なし)。
	
	とはいえ、SRの描画モードに関しては、VRAMが変態過ぎてメモリイメージ
	通りにドットを打っても何の役にも立たないけど、まぁ、他のモードの
	ついでと云う事で…(^^;


■2015.11.11 ver 310
	・描画デバイスロスト時の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Direct3Dのデバイスロストが発生したとき、ハードウェアアクセラレーションと
	ソフトウェアエミュレーション、両モードでの初期化を試みて、両方失敗したら
	システムダウンさせる…ハズだったが、無限再試行状態に陥っていた。
	デスクトップのデバイスコンテキストが取れない状態になったときに発生。
	例えば、仮想デスクトップソフトとかでエミュの実行中にデスクトップが
	切り替えられてしまったときなど…。


	・モニタモードのバイナリ編集をコマンド実行型に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コンソールのキー操作を出来るだけWindowsシェルと共通化したいので、
	TABキーによるバイナリエディタへのフォーカス移動を廃止。
	(先々、ファイル名のオートコンプリートに対応する予定。)
	
	今後、コンソールからバイナリエディタに入るときは"edit"コマンドを実行する
	形となる。バイナリエディタ側からコンソールに戻るときはTABキーでも戻れる。


■2015.11.09 ver 310
	・モニタモードのシェル実行で存在しないコマンドを叩くと、コンソールに制御が
	戻ってこなくなる不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	パイプにデータがないのにfgetsでテキスト読みに行って無限待機に陥っていた。
	PeekNamedPipeでパイプ内のデータ残量をチェックしてからfgetsするように修正。


	・モニタモードのコマンドライン処理をリファクタリング。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	やはり問題は文字処理関係。
	strcpy_sやstrcat_sなどのセキュア関数はバッファオーバーランで例外飛ばして
	アプリを止めるので、安全性もへったくれも無い。全て自前の関数に置き換え。
	文字処理のところは、全体的にマルチバイトコードの処理が負荷になっているので、
	やはりUNICODEに移行させないと駄目だろうなぁ。一度挫折してるけどｗ


■2015.11.08 ver 310
	・モニタモードで簡易UNIXコマンドを使えるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デバッグモード用に実装していた擬似的なUNIXコマンドを、リリースモード
	でも使えるようにする。
	最近、パイプハンドルをファイルストリームに変換する方法を調査して、
	パイプに出力した実行結果をモニタコンソールに表示できるようになったので、
	リリース用コマンドに格上げ。
	以前は、実行結果がログコンソールにしか出力されていなかった。
	
	内部では規定のスイッチでWidnowsのShellAPIを叩いているだけなので、
	本物のUNIXコマンドにあるようなオプションには対応していない。
	あくまでも簡易コマンド。

	対応コマンドは以下のとおり。

	"ls" : 開発用フォルダの中身を簡易表示。(ファイル名だけ表示)
	     : ワイルドカードを引数に与えるとフィルタをかけられる。
	     : ex) -> "ls *.txt"

	"l"  : 開発用フォルダの中身を詳細表示。(日付とサイズも表示)
	     : ワイルドカードを引数に与えるとフィルタをかけられる。

	"cd" : チェンジディレクトリ。開発用フォルダを移動できる。

	"cp" : ファイルやディレクトリのコピー。

	"mv" : ファイルやディレクトリの移動、またはリネーム。

	"md" : ディレクトリを作る。
	     : 階層指定すると階層ディレクトリを作成する。
	     : ex) ->"md floor1\floor2\floor3"

	"rm" : ファイルやディレクトリの削除。
	     : ディレクトリを指定しても「消して良い？」…なんて確認無しに即殺！
	     : …でも、ゴミ箱に移動しているだけなので多い日も安心だ！


	・モニタモードのシェル実行"!"を、コマンド("cmd.exe")経由で実行する
	ように変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	以前からデバッグモード上で試験はしていたけど、実行結果がログコンソール
	にしか表示されなかったので本実装されていなかった。
	今回、シェルの実行結果がモニタコンソールに表示できるようになったので、
	リリース版に移行。

	要するに何が出来るようになったのかというと、コマンドプロンプトの
	内包コマンドが実行できて、コンソールアプリの実行結果がモニタモードの
	コンソールに表示されるようになった。
	
	たとえば、
	"! dir /w" とか実行すると、開発用フォルダのDIR結果が表示される。
	ZASMもモニタコンソール上から実行できて、結果も表示されるぞ！
	(但し、ZASMは64bit-OSだと互換性エラーになるので、TAKEDA氏が作った
	"MSDOS.EXE"を間に挟んで実行しよう。"! msdos zasm test.asm")

	コマンドプロンプト上と同じ様な事が出来るので、簡易UNIXコマンドだけでは
	足りない機能などは、ここから直接シェルコマンドを実行すれば、大概の
	やりたい事は済ませられると思う。
	
	ただ、実行結果取り出しのために実行コマンドが終了するまでコンソールが
	待機状態になるので、ここからGUIのアプリとか起動させてしまうとアプリを
	終了させるまでモニタモードに制御が戻って来なくなるので注意が必要。
	
	
	まぁ、シェルコマンドが使えるようになったと言っても、所詮、グラフィック
	画面上でコンソールっぽい描画をやっているだけなので、テキストのコピーとか
	パス入力の自動補完とかは再現できていない。
	これが出来るようになると、使い勝手も全然違ってくるので、何とか“楽に”
	再現できる方法はないか思案中。


■2015.10.28 ver 310
	・モニタモードのバイナリエディタを、Bz-Editor の COPY & PASTEに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Bz-Editorのソースを見つけたので、クリップボード格納形式に対応してみる。
	Bz-Editorのクリップボード形式登録名は"BinaryData2"。
	バイナリデータの頭にDWORDのサイズ情報がくっ付いている。
	これでBz-Editorに対してはデータの相互運用ができるようになった。

	PASTE時のクリップボード取り込み"BinaryData2"が優先。
	"BinaryData2"が空だったらテキストバッファの情報を見に行く。
	COPYの時は"BinaryData2"とテキスト、両方クリップボードに登録している。


■2015.10.26 ver 310
	・文字列操作関数をリファクタリング。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ファイルパスが長すぎるとバッファオーバーランを起こす箇所があったので、
	文字列バッファを拡張し(260->1024)、文字列操作部分を全面的に見直し。
	影響範囲が予想以上に広く、修正箇所が300箇所ぐらい出て来てしまったので、
	メディアイメージの操作部分はデグレードの心配があるかも…(^^;;


■2015.10.15 ver 310
	・モニタモードのバイナリエディタに COPY & PASTE & UNDO を実装。
	[Ctrl]+[C], [Ctrl]+[V], [Ctrl]+[Z]
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	作り始めてから何年も放置されていた機能を完成させてみた。

	挙動は以下のとおり。
	- COPYとPASTEはRAMに対して行われる。
	- COPYとPASTEは64KBのサイズまで対応。
	- COPYを行うと選択範囲のバイナリが16進数テキストとしてクリップボードに
	　保存される。
	- PASTEは、クリップボードの16進数テキストをカーソル位置のメモリから
	　書き込む。
	- PASTE後もクリップボードは消さないので、繰り返しPASTE可能。
	- 16進数テキストのデータ区切りはスペース、TAB、カンマ、改行コード(CR/LF)。
	- 16進数テキストのデータはHEX記号のみ。"0x"プリフィクスには対応。
	- 16進数テキストに8bit以上の値が出てきたら、下位8bitのみ有効になる。
	- 16進数テキストに16進数以外の文字が出てきたら、ペースト処理は中断される。

		ex)
		例えば、下のテキストをコピーしてバイナリエディタにペーストすると、
		00～0F までの連続データが書き込まれる。

			00 01 02 03
			04,05,06,07
			8	9	A	B
			0x0C 0xD 0xEE0E 0xA10F**exception**10 11 12

	今のところ、条件付で外部バイナリエディタと連携可能。
	COPY動作を行った時にクリップボードに16進数テキストを保存してくれるエディタ
	なら、COPYデータをP6のメモリ内に貼り付けることが出来る。
	VisualStudioのMemoryViewやStirlingなどはこのタイプなのでPASTE可能。

	Bzはクリップボードにバイナリを直接保存しているようなので、そのままでは
	P6上に貼り付けは出来ない。[ダンプリストのコピー]というメニューで
	16進数テキストの取得は出来るけど、アドレスとかインデクスとかも出力されて
	いるので、加工しないと使えないので少し手間かも…。
	
	逆に、P6VWのCOPYデータを外部バイナリエディタに貼り付けられるかというと、
	16進テキストのペーストを受け付けるエディタであれば可能なはずだけど、
	今の所、その様なバイナリエディタを見たことがないので、無理っぽい。
	Stairlingはデータペーストにクリップボードを使っていないようなので
	やっぱり無理っぽい。
	
	そういえば、異なるバイナリエディタ同士で相互連携出来る組み合わせというのは
	見た事がないかも…。Windowのクリップボードはサイズ情報を持っていないので、
	汎用的なバイナリイメージを受け渡せないって事なのだろう。
	相互連携したいバイナリエディタを個別対応するしかないのかも知れない。
	対応出来るようなら対応してみよう。


	他、作りかけで放置されているのはバイナリ検索の部分と、手動でメモリバンク
	を切り替えられる「メモリバンク設定ダイアログ」。バイナリ検索は時々欲しく
	なる機能なので、早めに実装したいところ。


■2015.10.14 ver 310
	・モニタモードのコマンドで2進数(&b****)の数値に対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	C言語だと2進数のプリフィクスが存在しないので、MSX-BASICの2進数表記 "&b" に
	対応してみる。
	I/Oポートのフラグ立てとか、時々、使いたくなるよね。

	ex) "out 0xc0 &b11111100"

	・モニタモードのヘルプコマンドに数値の基数変換機能を実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ヘルプの引数に数値を指定すると10進数・16進数・2進数に変換して表示する。
	32bitまで対応。2進数は8bitごとに区切りが入る。

	"? 200"
		-> " 200, c8H, 11001000B"
	"? 0x64"
		-> " 100, 64H, 01100100B"
	"? &h33"
		-> " 51, 33H, 00110011B"
	"? &b00010010101110011011000010100001"
		-> "314159265, 12b9b0a1H, 00010010:10111001:10110000:10100001B"

	基数変換でcalcを起動する手間を省くために実装してみる。
	レジスタや括弧を使った演算にも対応したいけど、これはこれで別アプリが作れる
	くらい労力がかかるので先送り。

■2015.10.13 ver 310
	・ヘッダの入れ子構造を大幅修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	VS2013に環境移行したことにより、includeの入れ子構造でリンケージエラーが出る
	ようになってしまった。今まで共通ヘッダで基本ヘッダをまとめてincludeしていた
	ところを、ソース毎に必要なヘッダだけincludeするように修正。

	共通ヘッダで一括Includeは、Allegroを使っていたときの名残なので、特に一括り
	にしておく必要も無いのだが、システムメニューとエミュレータの共通ソースで
	それぞれ個別に#ifdefでインクルードヘッダを分けるのは合理的でないといえば
	合理的でないかも…。


	・エミュレータメニューにDISKの一括イジェクトを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メニューは項目をクリックする度に閉じてしまうので、
	"Eject Disk1"->"Eject Disk2" や "Eject Tape"->"Open Tape" にような組み合わせ
	選択を行うのが手間で、何とか "Eject" だけでもメニューを消さないように出来
	ないものかと頑張ってみたけど、結局、上手く行かず orz
	
	仕方が無いので、DISK1,2だけでも一括イジェクト出来るようにメニューを追加。

■2015.10.11 ver 310
	・モニタモードのバイナリエディタで上位バイトだけ入力されて確定されたとき、
	下位4bit扱いで値を設定する。P6の"mon"コマンド準拠。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	例えば、バイナリエディタ上で1桁だけ値を入力してENTERもしくはSPACEを押すと
	その1桁が下位4bit扱いでメモリに書き込まれる。
	今までは上位4bit扱いでメモリに書き込んでいた。

	・モニタモードのバイナリエディタで選択範囲のフィルメモリ実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	範囲を選択した状態でバイナリを入力すると、選択範囲がその値で埋められる。

	・モニタモードのバイナリエディタでキャラクタ側にもカーソル表示。

■2015.10.08 ver 310
	・ドラッグ&ドロップ時の確認ダイアログを表示させないようにするフラグを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	本当にドラッグ&ドロップしたファイルを適応してよいか、確認する意味で
	ファイル選択ダイアログを表示させていたけど、テストする上で非常に鬱陶しいので
	オプションから切れるようにする。
	但し拡張ROMだけはリセットがかかってしまうので、必ず確認ダイアログを経由する。


	・FDDが2台接続の状態でディスクイメージをドロップしたとき、ドライブ選択
	ダイアログを表示して、マウントするドライブを選べるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までDISKのドラッグ＆ドロップはドライブ1しか設定できなくて、2ドライブ用の
	ソフトのDISKをマウントするのが面倒だったので…。


■2015.10.07 ver 310
	・ファイル名やパスのバッファサイズがソースによって異なってしまった不具合
	を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	VS2008ではソース中にincludeで別のソースを入れ込むと親のソースがインクルード
	しているヘッダの定数を使うことが出来たのだが、VS2013にしてからは親ソースの
	定義が継承されなくなったような気がする。スコープが変更されたのかな？
	
	そういや、VS2013は"C"のソースにも関わらず、関数途中で変数の定義ができる
	ようになっているんだよね。いつものC++の癖で、"C"関数の途中で変数定義を
	やってしまったわけだが、VS2013だとコンパイルが通ってしまう。
	で、そのVS2013で作っていたソースをVS2010Express環境に持っていってコンパイル
	したら、変数未定義エラーがバカバカ出てきて、仕様が変わったことに気がついた。
	便利ではあるけど、"C"のソースは"C"のルールでコンパイルしてくれた方が
	間違いが起こらなくて良いのかもしれない。

	・環境ファイルの読み込み部分をリファクタリング。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	インクルードしていた部分ソースを独立させたので、INIファイルアクセスの
	関数を作り直し。


■2015.10.07 ver 310
	・DISK読み出し部分の整理を行う。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メモ。 トラックとテーブルの対応表。
	
	+-------------------------------------------------------+
	| 66 (1D-DRIVE)                                         |
	+------+------+------+------+------+------+------+------+
	|Access| 1D   |Access|  2D  |Access| 1DD  |Access| 2DD  |
	|Track |Table |Track |Table |Track |Table |Track |Table |
	+------+------+------+------+------+------+------+------+
	|     0|     0|     0|     0|     0|     0|     0|     0|
	|      |      |      |      |      |      |      |     1|
	|      |      |      |     1|      |     2|      |     2|
	|      |      |      |      |      |      |      |     3|
	|     1|     2|     1|     2|     1|     4|     1|     4|
	|      |      |      |      |      |      |      |     5|
	|      |      |      |     3|      |     6|      |     6|
	|      |      |      |      |      |      |      |     7|
	|     2|     4|     2|     4|     2|     8|     2|     8|
	|      |      |      |      |      |      |      |     9|
	|      |      |      |     5|      |    10|      |    10|
	|      |      |      |      |      |      |      |    11|
	|     3|     6|     3|     6|     3|    12|     3|    12|
	|      |      |      |      |      |      |      |    13|
	|      |      |      |     7|      |    14|      |    14|
	|      |      |      |      |      |      |      |    15|
	|     4|     8|     4|     8|     4|    16|     4|    16|
	|     :|     :|     :|     :|     :|     :|     :|     :|
	+------+------+------+------+------+------+------+------+
	|      x2     |      x2     | x4(invalid) | x4(invalid) |
	+-------------+-------------+-------------+-------------+

	+-------------------------------------------------------+
	| SR (1DD-DRIVE)                                        |
	+------+------+------+------+------+------+------+------+
	|Access| 1D   |Access|  2D  |Access| 1DD  |Access| 2DD  |
	|Track |Table |Track |Table |Track |Table |Track |Table |
	+------+------+------+------+------+------+------+------+
	|     0|     0|     0|     0|     0|     0|     0|     0|
	|      |      |      |      |      |      |      |     1|
	|      |      |      |     1|     1|     2|     1|     2|
	|      |      |      |      |      |      |      |     3|
	|     2|     2|     2|     2|     2|     4|     2|     4|
	|      |      |      |      |      |      |      |     5|
	|      |      |      |     3|     3|     6|     3|     6|
	|      |      |      |      |      |      |      |     7|
	|     4|     4|     4|     4|     4|     8|     4|     8|
	|      |      |      |      |      |      |      |     9|
	|      |      |      |     5|     5|    10|     5|    10|
	|      |      |      |      |      |      |      |    11|
	|     6|     6|     6|     6|     6|    12|     6|    12|
	|      |      |      |      |      |      |      |    13|
	|      |      |      |     7|     7|    14|     7|    14|
	|      |      |      |      |      |      |      |    15|
	|     8|     8|     8|     8|     8|    16|     8|    16|
	|     :|     :|     :|     :|     :|     :|     :|     :|
	+------+------+------+------+------+------+------+------+
	|      x1     |      x1     |      x2     |      x2     |
	+-------------+-------------+-------------+-------------+

■2015.10.04 ver 310
	・SRビットマップモードのXY座標変換を実機の仕様に合わせる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRビットマップモード いと煩はしき理なれば でばぐの任 生難し。

■2015.10.02 ver 310
	・SRグラフィック画面のページ2対応。

■2015.09.28 ver 310
	・SRビットマップモード動作時、&H6xポートのページ指定がCPUアドレス(この場合、
	X座標)に反映されていなかった不具合を修正。

■2015.09.24 ver 310
	・SRモードの&H6xポートのページ切り替えを16KB区切りに修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今まではページ指定されたブロックを8KB単位(0x2000)で割り当てていたけど、
	実際は16KB単位で(0x4000)でアドレス空間が切り替わるらしい。
	
	故に、偶数バンクに割り当てられる物理アドレスは0x4000単位となり、
	奇数バンクも割り当てられる物理アドレスは0x4000単位 + 0x2000となる。
	
	具体的な例だと、
	&H60ポート(偶数バンク)に&h02ページ(0x2000)を指定しても、実際にマッピング
	されるアドレスは16KB単位で丸められた0x0000になる。
	&H61ポート(奇数バンク)に&h04ページ(0x4000)を指定しても、実際にマッピング
	されるアドレスは 16KB単位 + 0x2000 に切り上げられた0x6000になる。
	
	こんなところ。

■2015.09.24 ver 310
	・開発環境をVisual Studio 2013に移行。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今後、サポートするOSはWindows7,8,10。
	XpやVistaでもVS2013のランタイムをインストールすれば動くと思うけど、
	そのランタイムライブラリ自体がインストールできない可能性もあるので
	サポート対象外とする。

	・古いAPIの使い方を修正。

	・1DD_DISKの新規作成で2DDのセクタテーブルを生成していた不具合を修正。

■2015.09.18 ver 310
	・モニタモードで"reg c"コマンドが"reg CLEAR"と解釈される不具合を修正。

	・mkIIのインテリジェンスタイプディスクアクセスがおかしくなっていた
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	不具合…というか、プログラムをリビルドしたら直ってしまった！？
	おそらく、VS2008,VS2010,VS2013の3つの環境でデバッグやビルドをやって
	いたので、異なるコンパイラでビルドされたオブジェクトが混ざりあって
	しまったのではないかと想像しているが、断定は出来ない。

	コーディング以外の処で余計な問題が起こらないように、今後は開発環境を
	一本化すべきかも知れない。そろそろVS2008を使い続けるのも厳しい状況。

■2015.09.12 ver 310
	・&HC8ポートでSRのビットマップモードを有効にしてから、&HC1ポートで
	グラフィックモードに切り替えると、ビットマップの表示アドレスが
	テキストモード用のアドレスにリセットされてしまう不具合修正。

==============================================================================
■2015.07.24 ver 309b
	・SRの&HC1,&HC8ポートで描画モードを切り替えたときの初期化を抑制。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ポートの変更が行われても、表示解像度が同じだったら、画面の初期化を行わない
	ように修正。
	どこでもロードとの絡みで少し怪しいところはあるかも知れないけど、多分、
	大丈夫だと思う…。

==============================================================================
■2015.01.18 ver 309a
	・オートキー入力のウェイト時間を調整。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	キースキャンの間隔を短くしたら、P6Tの自動実行コマンドの入力タイミングが
	早くなりすぎて、正常に起動できなくなっていたりして…（＾＾；

■2015.01.11 ver 309a
	・システムメニューの使用方法とキーボード置換が入れ替わっていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

==============================================================================
■2014.12.01 ver 309
	・忙しくて何処を修正していたか忘れてしまったのでとりあえずフルビルドｗ
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

■2014.09.07 ver 309
	・SRの拡張RAMのREAD/WRITE用メモリのポインタ設定不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張メモリオプションがOFFになっている時も、メモリバンク切替でEXTEND_RAMに
	マッピングされてしまっていたのでEmptyRAMを指すように修正。

■2014.09.02 ver 309
	・疑似ステレオが有効になっている時、FM-chのPAN情報をGIMICにも反映してみる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	OPNAのステレオは左右真中の3ポジションのみで、SSGは3chまとめてど真ん中という
	こともあって、FM-3chだけのPAN振りだとちょっとスカスカ気味。
	それでも個別のチャンネルは良く聞き取れるようになる。


	・FDC ResultのST0にドライブ番号が設定されていなかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	CommandResltを関数化したときにデグレを起こした模様…orz
	これにより、SR版Ys2_OPデモが正常に動くようになる。


■2014.08.31 ver 309
	・GIMICでOPNAモジュールが使用されているときも、SSG/FMのソフトウェア
	音量調整が有効になるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	OPNA用のSSGボリュームオプションは音量を下げる方向にしか調整できないので、
	ソフトウェア調整で音量を大きく出来るようにしておいた方が都合が良さそう。

	例えば、ソーサリアンの楽曲などはSSGの音量がVOL:8になっていて、
	mucom60使ってGIMICで再生するとSSG-chがかなり小さく聴こえる。
	昨日のVOL2LV[]を参照するとSSGのVOL:8というのは最大音量の10%程度。
	察するに88SRはFM-chに比べてSSG-chの音がかなり大きいらしい。

	GIMICではFMとSSGの最大音量バランスが等しい感じなので(…少なくともOPN3L
	モジュールでは…。OPNAモジュールは未確認。)、88SR実機と同じ聴こえ方に
	したかったらSSGの音量を200%くらいに割り増しする必要がある。


■2014.08.29 ver 309
	・TLの調整をキャリアOPだけに対して反映させるように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	昨日の修正で、全てのOPに対して機械的にTL調整かけたら、音色自体が大幅に
	変わってしまった…orz
	TwitterでFM専門家の諸氏に教えてもらったところによると、FM音の音量調整は
	アルゴリズム毎にキャリアオペレータに対してだけ行うとのこと。

	自分はFM音源は専ら聴き専だったので、こういう実践的な知識が欠落している。
	因みに66SRや88SR-BASICのボリュームコマンドなども全オペレータに対する
	無条件TL反映らしいｗｗｗ。Music-Lalfも同様だそうな。


	・OPN3L用のSSGボリューム調整も付けてみる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SSGの音量もFMと同様線形ではないのでテーブル参照で変換を行う。
	配列は以下の通り。
----------------------------------------------------------------------
//SSGのVOL値→音量レベル変換
const int VOL2LV[16] = {
   0,  1,  1,  2,  2,  3,  4,  6
,  9, 12, 18, 25, 35, 50, 71,100
};
----------------------------------------------------------------------
//SSGの音量レベル→VOL値変換
const int LV2VOL[101] = {
   0,  2,  4,  5,  6,  6,  7,  7,  8,  8
,  8,  9,  9,  9,  9, 10, 10, 10, 10, 10
, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11
, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12
, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13
, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13
, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14
, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15
, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15
, 15
};
----------------------------------------------------------------------
	それにしても、何という粗さ…。そりゃ、そもそも16階調しかない数値を
	パーセントで調整するんだから当たり前なんだけどね。


■2014.08.28 ver 309
	・GIMICでOPN3Lモジュール(MB2_lite版含む)が使用されているとき、FMチャンネル
	のボリューム調整を行うようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	GIMICでFMの楽曲を聴いてみるとFMに比べてSSGのボリュームがかなり小さく感じる。
	OPNAモジュールではSSGのボリュームを調整できるオプションがあるが、OPN3Lでは
	SSG/FMのボリュームバランス調整を行う手段が無いため、代替手段としてFM-chの
	TL(トータルレベル)設定時にGIMIC用FMボリューム比を反映させる。
	(SSG-chの音量は上げられないので、代わりにFM-chの音量を落とす。)

	FM音源のTL値と音量dB(デジベル)は指数的な関係なので、そのままTL値に
	ボリューム比を反映させることは出来ない。
	そこで、一旦TL値を音量レベルに変換し、音量に対してボリューム比を反映
	させた後、再びTL値に変換するという手順でボリューム調整を行っている。
	まぁ、ボリューム比は整数扱いなので音量が小さい方はかなり数値が粗くなるけど、
	どうせ耳では聞き分けられないので大丈夫・・・(かな？)。

	因みに、TL値と音量レベルの関係はテーブルで持っておいて(Excelで計算した)、
	配列参照を行う。配列は以下の通り。

----------------------------------------------------------------------
//FMのTL値(0-127)→音量レベル変換
const int TL2LV[128] = {
 100, 92, 84, 77, 71, 65, 60, 55, 50, 46, 42, 39, 35, 33, 30, 27
, 25, 23, 21, 19, 18, 16, 15, 14, 13, 12, 11, 10,  9,  8,  7,  7
,  6,  6,  5,  5,  4,  4,  4,  3,  3,  3,  3,  2,  2,  2,  2,  2
,  2,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  0,  0
,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0
};
----------------------------------------------------------------------
//FMの音量レベル(0-100)→TL値変換
const byte LV2TL[101]={
 127, 53, 45, 41, 37, 35, 33, 31, 29, 28
, 27, 26, 25, 24, 23, 22, 21, 21, 20, 19
, 19, 18, 18, 17, 17, 16, 16, 15, 15, 14
, 14, 14, 13, 13, 12, 12, 12, 12, 11, 11
, 11, 10, 10, 10, 10,  9,  9,  9,  9,  8
,  8,  8,  8,  7,  7,  7,  7,  7,  6,  6
,  6,  6,  6,  5,  5,  5,  5,  5,  4,  4
,  4,  4,  4,  4,  3,  3,  3,  3,  3,  3
,  3,  2,  2,  2,  2,  2,  2,  2,  1,  1
,  1,  1,  1,  1,  1,  1,  0,  0,  0,  0
,  0
};
----------------------------------------------------------------------

	例えば、GIMIC用FMボリューム比が"40[%]"に設定されていて、
	FM-chのTLに"16"の値が設定されようとした場合…

	1).TL2PC[16]で音量レベル取得 → "25"

	2)."25"を40[%]にする → "10"

	3).PC2TL[10]のTL値を参照 → "27"

	4).TLに"27"を設定する。

	…といった感じ。

	OPNAはSSGの調整なのにOPN3LはFM調整ってのも何かアレな感じがしないでもないけど、
	気にしない、気にしない。


	・ボリュームコントロールにGIMIC用FMボリューム比を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	いちいちシステムメニューからパラメタ設定して再起動するのも手間なので…。
	ボリュームコントロールからボリューム比を変更したら、次のFM-chのTL設定から
	比率が反映されるようになる。
	TLをバンバン投げるサウンドドライバーだとリアルタイムにFMの音量が反映される。
	そうでないドライバーの場合、一旦、曲を停止させて再びPLAYすればOK。


■2014.08.26 ver 309
	・コンテキストメニュー、若しくはメニューバーを有効にしたとき
	GIMICをMuteさせるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メニュー処理が終了したときはResume処理でボリュームを復元する。
	復元するボリュームは最後に設定されたボリューム値。(SSGのVOLとFMのTL)


	・GIMICへのコマンド送信を即時送信方式に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	キュー方式だとメニュー表示でMuteするときに少し都合が悪かった(^^;
	mucom60を動かして演奏中にキューに積み上げられるコマンド数を確認してみたが、
	P6程度の処理速度なら即時発行でも全然大丈夫そう。


■2014.08.22 ver 309
	・メニューにBUS_REQ切替を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	mkIIでBUS_REQを無効にしたいときとか、モニタモードからいちいち "OUT 0xc8 2"
	と入力するのが面倒だったもので…(^^;


■2014.07.31 ver 309
	・モニタモード使用中もメニューを使用できるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードと通常実行モードの切替は条件付で動作が変わる。
	モニタモード画面から"go"を使ってCPUを実行している最中に、メニューから
	モニタモードが実行されたときは、コンソールに制御が戻るようにする。
	CPUが実行されていないときは、モニタモードを閉じる。

	・バイナリエディタ使用中もメニューを使用できるようにする。


■2014.07.30 ver 309
	・キーボードスキャン間隔を変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今まではVSYNC(16ms)に合わせてキースキャンを行っていたが、これだと素早く
	入力を行ったときにキュー溜りが発生してもたつくので、キースキャン専用の
	カウンタを用意してスキャン間隔を短くする。

	・メニューにコンソール表示を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	トグル動作で開いたり閉じたりさせる。
	因みに、エミュレータ起動と同時にコンソールを表示させたいときは、
	[Ctrl]キーを押しながら起動する。


■2014.07.29 ver 309
	・PAUSEダイアログを廃止。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までのポーズ機能はモーダルダイアログを使った手抜き仕様だったが、
	ポーズ中にエミュレータ本体のウィンドウが移動出来なくなるのは不便なので、
	CPU処理の方で空回りするように修正。


■2014.07.21 ver 309
	・システムメニューにOPTION3を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	GIMIC設定を配置する場所がなかったのでタブを新設。


	・GIMICへの送信パラメタのデフォルト値を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	検証の結果、P6SRのFM:SSG音量比は100:100ということなので、
	OPNAのSSGボリュームが100%になるように再設定。
	100[%] / 0.8[%/n] = 125


■2014.07.15 ver 309
	・ボリュームダイアログを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モードレスでエミュレータを動かしながらリアルタイムにボリューム値を
	反映させる。

	・ファンクションメニューのmode4カラーセットトグルを廃止。替わりに
	ボリューム設定機能を割り当てる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ショートカットキーで色滲みのトグル変更を行う機会など殆ど無さそうなので、
	それよりも使用頻度が高そうなボリューム設定機能と交換する。

	・擬似ステレオが有効のときにボリューム変更を行うとLチャンネルにしか
	設定値が反映されない不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	動的ボリューム変更はデバッグ機能に入っていただけなので、今まで放置していた
	(というか、直すのを忘れていた…)のだけど、機能を表に出したので修正。

	・Muteダイアログをボリュームダイアログと統合。

	・PANダイアログをボリュームダイアログと統合。


■2014.07.08 ver 309
	・STICK割込の重複発行時の不具合解決。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	INT(16H)発行後データを取得する前に、再度INT(16H)ベクタが発生したとき、
	データの上からベクタ値が上書きされていた。

	SUB-CPU部分は作り直す予定なので暫定対応。
	現在のSUB-CPU処理はエミュレータ側の様々な拡張機能に対応させるため
	複雑になり過ぎた。今となっては不要な処理も大量に残存しているし…(^^;


■2014.07.07 ver 309
	・GIMICへの送信パラメタのデフォルト値を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	送信間隔       = 500usec
	送信コマンド数 = 100

	・GIMIC-OPNAモジュール用PLLクロック数とSSGボリュームをINIから変更出来る
	ようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	PLLクロック数 = 8000000 [Hz] (音源チップに掛けるクロックx2)
	SSGボリューム = 50  (FM:SSG=40:100。刻み値:0.8%)

	・PC-6601のとき、仮想音源のPSGのベースクロックを2[MHz]に設定。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	PC-6601以外の機種は1.996750[MHz]。

	・エミュレータ内メニューでJOYSTICKのトリガ設定が反映されない不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	作業用変数に取り込んだトリガ情報が環境定義に反映されていなかった。

	・システムメニューの[x]ボタンでオプションが保存されない不具合を修正
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	[x]から終了処理が行われたとき、各種オプションを取り込まずにダイアログが
	終了してしまっていた。


■2014.06.23 ver 309
	・GIMICへの出力インターバルとコマンド数をINIで変更できるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	sound_gimic_interval = 500 ;[us]
	sound_gimic_commands = 10  ;[cmd]
	
	GIMICへの出力に緩急が付くと音が揺らぐようなので、キュー積み仕様に戻して
	タイマーを高精度化することでより細かく分散送信させる。
	PSGのゲームなどに比べて、FM音源ドライバーは短期間にかなりの数のSOUND-OUT
	が行われるので、ms単位の分散では送信が追いつかないのかも知れない。
	送信間隔をus単位にしてもっと小刻みにOUTを行う。


■2014.06.17 ver 309
	・テキストファイルドロップ及びクリップボードコピーで濁点・半濁点の
	仮名文字が入力できなくなっていた不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	変換テーブルが "#if 0" で括られていたので、どうやら開発途中に仕事が入って
	作業を中断したきり忘れてしまったらしい。
	大体、数ヶ月 間が空くと何をやっていたか忘れるよね…(汗。

	・1DDのベタディスクからD88変換したとき2Dに変換していた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	D88トラックテーブルの裏面の所に奇数トラックを書き込んでいたりして…。
	まぁ、非SR機種で使う分には問題ないのだけど、SRで1DDアクセスしようとすると
	宜しくないですな…。
	ベタディスクイメージの場合、1DDと2Dの区別が付かないのでどちらか決め撃ちで
	変換させることになる。P6の場合、常に片面扱いにしておけば問題ないでしょう。

	・GIMICへのOUTのキュー積みを取りやめ。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	GIMIC-Projectのそんそんさんにチップの送信waitについて尋ねたところ、
	ファーウェア側が面倒を見てくれるのでアプリは考慮する必要無いとの事。
	確かに、アプリ＋USB転送+ファームで各々waitが入るとかなり遅延の影響が
	出そう。エミュ側からは仮想音源チップと同じタイミングで一気に出力する。


■2014.06.13 ver 309
	・SRのセミグラ描画の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	横4ドットのピクセル描画を行うのにword長のデータを書き込んでいた。
	(スクリーンバッファのテクスチャは16bitカラーなのでwordだと1ドット分しか無い)
	SRセミグラデータ生成関数に手を入れたときにデグレを起こした模様。
	qword長データを生成するように修正。

	・STICK1/2の切替を行うのにサウンドレジスタ[15]のデータ全体の値から判断して
	いたので、データ6bit目から判定するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	if (R[15] == 0xc0) STICK1取得; //0xc0
	else               STICK2取得; //0x80
	　　　　　　　↓
	if (R[15] & 0x40) STICK1取得; //0xc0
	else              STICK2取得; //0x80

	PSGチップのI/Fでは正常に6bit目で判断されているのだけど、エミュレータ拡張の
	キーボード置換機能デバイス切替判定のところでBASIC-BIOSから設定される値を
	そのままSTICK1/2の区別に用いていた。

	・エミュレータ終了時、GIMICをリセットする。


==============================================================================
■2014.06.10 ver 309
	・SR機種にて、C1Hポート変更を行った際、TEXT/GRPモードが切り替わっても
	ATTRとVRAMの差分が以前の状態そのまま保持されていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ずいぶん前に、SR機種でC1Hポートから画面モードが変更されたとき、
	B0Hポートで指定されたVRAMアドレスをそのまま保持するような改修を行った
	のだけど(非SR機種のときはC1Hの変更と同時にVRAMアドレスも変更される)、
	TEXT/GRPモードが切り替わってもATTR:VRAM両アドレスを保持していた為、
	グラフィックモードなのにATTR:VRAM=0x0000:0x0400で画面描画を行うような
	奇妙な状態になっていた。
	ATTRの開始アドレスだけ保持して、VRAMの方は再計算させる。
	<N60>
		VRAM = ATTR + 0x0200
	<N66>
		<テキストモード>      VRAM = ATTR + 0x0400
		<グラフィックモード>  VRAM = ATTR + 0x2000

■2014.06.07 ver 309
	・DISKタイプ認識処理の整理。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DISKタイプとトラック並びを複合的に判定して最終的なタイプを決定する。
	DISKタイプとトラック並びがかみ合わないタイプのDISKがあるので、その場合、
	トラック並びの方を優先させる。

■2014.06.06 ver 309
	・昨日のGIMIC動作テストの結果に基づき対応を行う。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	* STICK読出しで固まらないように、GIMICのINを読まないようにする。
	* 1/60[sec]間隔にOUT命令が集中しないよう、一旦キューに積んでもっと
	短い間隔で少しずつOUT送信させる。

■2014.06.05 ver 309
	・GIMICの動作テスト依頼の結果メモ。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	* OPNA : SSG再生OK。音の変化に微妙に違和感が感じられる。
	→ 現在、p6vwでは1/60[sec]ごとに1フレーム分だけCPUが実行されているので、
	   そこにSOUND-OUTが集中してしまうとUSB転送などがもたついて反映に遅延が
	   出ることがあるのではないかと予想。
	  
	* OPN3L: SSG再生OK。SRで起動しようとしたら固まった。
	→ ログ確認。汎用入出力(STICK)を読むためにステータスチェックを行うも
	   いつまでたってもReadyにならないので無限待機に陥っている様子。

■2014.06.03 ver 309
	・英語版DLLの誤植修正。

	・英語版のファンクション画像("lang\func_en.bmp")を入れ忘れていたので追加。

	・英語版ダイアログフォントを"Verdana"から"Tahoma"に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	日本語UIフォントと幅が同じになるように汎用の"Verdana"を選択したけど、
	Xp以前では"Tahoma"になってしまうらしい。
	"Tahoma"フォントは"MS UI ゴシック"と縦横比が合わず、ページによって高さが
	デコボコしてしまうのだけど、何とか調整してみる。余白が出来るのは仕方が無い。

	・SRのディスクタイプ認識不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	特殊な吸出し形式の対応を切り捨てたときの残滓。
	他にも何かありそうな気がする…。

	・スキャンライン使用時のSR-SCREEN2の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	前のデグレと同様。普段スキャンラインは使わないので気づかなかった。
	スキャンラインも十分な試験が出来ないので不具合が残る可能盛大。

■2014.05.30 ver 309
	・GIMICのポート出力実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	GIMIC上でOPNAかOPN3Lのデバイスを認識したら、何も考えずに仮想音源と同じ扱い
	でポート出力。
	c86ctl経由でUSB制御を行っているので、"c86ctl.dll"と"WinUsb.dll"が必須。
	(※ 入手法はGIMICの公式ページを参照。　→ http://gimic.jp/index.php
	　他、WIN8.1以外ではGIMIをUSB制御モードで動かすためのドライバーが必要。
	　→ http://gimic.jp/index.php?USB%E5%88%B6%E5%BE%A1%E3%83%A2%E3%83%BC%E3%83%89#jf42dfdf
	　)

	c86ctlのAPIにはINとOUTしか用意されていないのでコントロールデバイスとか
	FMタイマーとかどうすんだろ？と思って、他のGIMIC対応エミュレータを見ると
	GIMICに対してはOUTだけしかやっていない様子。
	内部の仮想音源は仮想音源でそのまま動かしていて、タイマーとかJOYSTICKとかは
	そっちを参照しているのかな？
	とりあえずPSG(SSG)ポートだけはGIMICのINを取りに行くようにする。

	それと、GIMICに対してはOUTの垂れ流しになるので、エミュの仮想音源のように
	「メニュー表示でミュート」→「メニュー消去で音復元」のような器用な真似が
	出来なかったりする。
	制御のために下手にレジスタを変更するとその後が続かなくなってしまうので、
	メニューを開くと「♪ピャー」と音が鳴りっぱなしで止まるはず。

==============================================================================
■2014.05.30 ver 309
	・GIMICのI/Fだけ用意してみる。IOポートアクセスはまだ。

■2014.05.27 ver 309
	・プリンタ出力の文字置換を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コピペ用変換ルーチンと共用にしていたので無駄な検索処理が走っていた。

■2014.05.15 ver 309
	・フルスクリーン起動の禁止。(エミュ起動後のフルスクリーン切替は可能)
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	PCのパフォーマンスがこれだけ高くなると、もはやプログラムをフルスクリーン
	で使用する機会なんて殆ど無いでしょう。
	フルスクリーンの用途といったら、P6プログラムのデモ実行か、若しくは
	腰をすえて実機を弄りたい時くらいかな。


	・フルスクリーンモードのままp6vwを終了したときWindow座標を記憶しない。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	フルスクリーン終了のときに終了位置を記憶させると、次回エミュレータ起動時、
	Windowが(0,0)座標に移動してしまう不具合の対応。


■2014.05.14 ver 309
	・英語版コンテキストメニューのメディア項目を階層化。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	日本語の場合、頻繁に使う項目についてはフラットで並んでいる方が使い易い
	のだが、英語メニューをフラットにすると左端にアクションの単語が並ぶので
	非常に認識しづらい。
	この辺がMACRO->MICRO、MICRO->MACROの言語特性の違いなのかも知れない。
	言語が変われば使い易いメニューの形も変わる。

	また、日本語の場合、表意文字が所謂アイコンの役割を果たすので、
	一瞥したときの認識のし易さも、他言語とは一線を画す。
	メニューの左端にメディアのアイコンでもつければ英語でもフラットで
	行けると思うけど。


	・フルスクリーンモードに移行したとき、画面解像度を変えないようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	仮想デスクトップなどが使われているときに解像度変更が行われると非常に
	都合が悪い状態に陥るので(表示デバイス名を区別しなければならなかったり)、
	フルスクリーンモードはデスクトップ解像度そのままで	ウィンドウサイズを
	最大に拡大させる。


■2014.05.13 ver 309
	・SRのSCREEN2描画の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	以前、Windyさんから指摘されてSR-SCREEN2のVRAMドット並びを修正したのだけど、
	これがメモリリード・ライトの計算式にしか適応されていなかったので、
	VRAM描画ルーチンの計算式にも適応する。
	どうやら一度修正した後にデグレードを起こしていた模様。いけませんね。


■2014.05.12 ver 309
	・システムメニューからD88イメージを新規作成したとき、40トラックのイメージを
	作成するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までシステムメニューからD88イメージを作るときは35トラックで作っていた。
	エミュレータ側から新規作成する場合、40トラックにするよう仕様変更を行った
	のだが、システムメニューとエミュレータでD88作成関数が別々に分かれていた為、
	システムメニュー側の関数に変更反映するのを忘れていた模様……いけませんね。
	そういうわけで、D88作成関数をシステムとエミュレータで統合させる。
	
	しかし、そもそもなぜ40トラックのD88を作るように仕様変更したのか、
	理由は完全忘却…(^^;


■2014.05.10 ver 309
	・mkIIでFDD未実装のときDISKステートにアクセス出来てしまった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	未実装のときは0xffを返す。


■2014.05.08 ver 309
	・mkIISRのI/Oポートテーブルを独立させる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	66SRと共通のテーブルを使用していたので独立させる。

	・FDD未実装のときDISK_IOポートを閉じる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ステータスなど取得出来るポートがあったので0xffを返すようにする。


■2014.04.25 ver 309
	・ファンクションガイド画像を言語で切り替えるようにする。
	また、ファンクションガイドの画像位置を言語フォルダ("lang")に移動。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	日本語の時は"func_jp.bmp"、英語のときは"func_en.bmp"の画像を使用する。
	他の言語指定を行った場合、"func_***.bmp"("***"は言語ID)を使用する。
	例えば、DLLの例で使用した栃木弁なら"func_jp-tochigi.bmp"を使用する。
	指定画像が見つからなかったら"func.bmp"を使用する。
	全ての画像ファイルが見つからなかったらガイドは表示されない。


■2014.04.18 ver 309
	・言語を変更したとき、即座に表示に反映出来るようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	一旦、Windowを破棄してリブート。
	言語リソースの読み直しを行ってから各種GUIの作り直し。

	・INIファイルの音源ボリュームをPSGボリュームとFMボリュームに分離。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"sound_volume" --> "psg_volume", "fm_volume"


■2014.04.15 ver 309
	・言語DLLの存在を確認して言語選択一覧を作るようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	新規言語を増やしたとき、一々、INIファイルの言語設定リストを編集するのも
	手間なので、言語フォルダ内にDLLを置いただけでシステムメニューの言語リスト
	から選択できるように改修。

	但し、追加言語はシステムメニュー用DLLとエミュ用DLLが対で存在しないと
	受け付けないようにする。

	例えば、自分専用に栃木弁DLLを作った場合、
	"p6vwemu3jp-tochigi.dll", "pc6001vw3jp-tochigi.dll"
	の2つのDLLを作って"lang"ディレクトリにコピーすると、
	システムメニューの言語選択に"jp-tochigi"の選択肢が出てくるようになる。

	"p6vwemu3jp-tochigi.dll"
	         ^^^^^^^^^^ <-- この部分が言語ID扱い。

	"p6vwemu3jp-tochigi.dll" か "pc6001vw3jp-tochigi.dll" どちらか一方でも
	存在しなかったら、選択肢には出さない。


■2014.04.14 ver 309
	・DISKメディアのタイプ判別関数の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	1DDメディアを実装したまま非SR→SRに機種変するとDISKがトラックスキップの
	状態のままSEEKが行われていた。

	・モニタモードでトレース実行を行ったときのログ出力を整理。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	現在モニタモードでトレース実行を行ったとき、コンソール上には
	「一つ前の命令」「現在の命令」「次の命令」の3つの情報が表示されているが
	ログには「現在の命令」のみ出力を行う。
	そうしないとゴチャゴチャして物凄く読みづらい。


■2014.04.10 ver 309
	・コンソールのフォントサイズ設定方法の変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コンソールのフォント変更を行った際、関数は正常終了しているにもかかわらず
	選択したフォントが反映されていないことがしばしばある。
	予めコンソールで使用できるフォント一覧を取得して、その中から設定したい
	フォントサイズに近い物を選んでいるにもかかわらず、正しく反映出来ない。
	この変の原因はハッキリしないけど恐らくコンソールで使用しているフォントの
	都合なんでしょ。"monospace"フォントだし…。

	そういうわけで、フォントサイズを変更した後、再度カレントフォントの情報を
	取得し、サイズが変わっていなかったらリストの次のサイズのフォントを選んで
	再設定を行い、サイズ変更が成功するまでコレを繰り返す。


■2014.04.08 ver 309
	・DISKのトラックリードのやりかたを変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までは複数ブロックのREAD/WRITEする際、シリンダ番号を加算してそのセクタを
	検索しながらREADしていたが、プロテクト有のDISKなどは必ずしもシリンダ番号が
	連続しているわけではないので、シリンダ番号を見ないで同一トラック内のセクタ
	を順番に読みこむようにする。

■2014.04.03 ver 309
	・ポップアップメニューの表示位置を利き手設定の反対側に設定する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	使用しているPCがタッチパネルつきで尚且つ右利き設定になっていると、
	コンテキストメニューやポップアップメニューが左側に向かって広がって行く
	動きになる。
	これは、指でタッチしたとき、利き手の方向にメニューが出てこないようにする
	ためのOSの挙動なのだが、マウスで操作するときには使い勝手が悪すぎて困る。
	マウス操作を想定する場合、右利きのときは右側に広がり、左利きのときは左側に
	広がるようにしたい。
	メニューを開いた入力デバイスを判定するやり方もあるのだけど、
	それだと、タッチが行われたから右利き用、マウスクリックだから左利き用、
	キーボードが押されたから左利き用……とプログラム稼動中にコロコロと
	利き手設定を弄る必要が出てくるので、そんな面倒なことはしない。
	メニューは全部右側に開く。Final Answer !

	・CPUステートの計算値の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	倍精度浮動小数(double)への代入なのに、お尻に"f"がくっついている数値が
	幾つか見つかったので、数値設定部分をチェックしなおし。

	vcycle = 16651.576870039069211310376039402f;//描画サイクル
	hsync = 63.555563626103317600421282593179f; //水平周期

	…とか…これだけ小数並べてお尻に"f"つけてりゃ、世話ないね。


■2014.04.03 ver 309
	・ディスクのトラックSEEKの不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRの1Dディスク読込障害対応でDISKのSEEK方法に手を入れたことにより常に現在の
	SEEK位置を基準にしてREAD/WRITEが行われるようになったが、これがDATA-READ時の
	セクタSEEKにも適応されため、最後にリードされたセクタよりも前のセクタを
	参照しようとするとトラックを跨いで次のトラックの該当セクタまでSEEKが進んで
	しまっていた。
	DISK-SEEKを行うときはトラックの先頭セクタにファイルポインタを戻してから
	検索を行うように修正。

	D88イメージのSEEKはファイルポインタで行っているので、ただ相対位置を有効に
	しただけでは正常に動かないのであった。


■2014.04.01 ver 309
	・バグが幾つも残っていて、エイプリルフールネタ間に合わず…。


■2014.03.28 ver 309
	・モニタモードのメモリダンプ系コマンドの表示方式変更。
	"dump","dumpram","readaloud"
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	アドレスのラベルが16バイト区切りになるようにする。
	例えば"0x0003"から16バイト分のメモリダンプを行うと、
	今までは↓こうなっていたけど…

	ADDR: +0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
	0003: 00FF00FF00FF00FF00FF00FF00FF00FF
	000B: 00FF00FF00FF00FF00FF00FF00FF00FF

	これからは↓こうなる。

	ADDR: +0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
	0000:       00FF00FF00FF00FF00FF00FF00
	0010: FF00FF00FF00FF00FF00FF00FF00FF00
	0020: FF00FF

	こっちの方がメモリ配置が分りやすいと思うけど、どんなもんでしょ？


■2014.03.27 ver 309
	・コンテキストメニューとメニューバーのショートカット設定を消去。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	一応全てのニュー項目にショートカットキーを割り振っておいたのだけど、
	よくよく考えてみたら[Alt]の入力はエミュレータ側で取ってしまうので、
	Windowプロシージャにメッセージが送られて来ることは無いのであった…。


■2014.03.26 ver 309
	・モニタモードにメモリの読み上げ機能追加。"readaloud" (short:"ra")
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	とりあえずの実験的機能ｗｗｗ
	
	雑誌からマシン後入力したとき、一々画面と紙面で視線を行き来してチェック
	しなくて良くなるぞ、ヽ( ・∀・)ﾉ ヒャッハ～！
	16バイト区切りのチェックサムも読ませようかと思ったけど、入力するモノが
	IOモニタ形式とは限らないので見送り。
	
	本当はマシン後の読み上げなどは日本語棒読みの方が適していると思うのだが、
	現在の日本語エンジンだと"0"を"れい"と読んだり、抑揚が気持ち悪かったりして
	何かシックリ来ない。で…今は英語ボイスを選択してあると。

	英語発音は英語発音で変な感じだけど…まぁ、慣れれば平気でしょう。
	「ジィロォ　ジィロォ　イェフイェフ　ジィロォ　ジィロォ　イェフイェフ」

	本丸は勿論BASIC-LISTなのだけど、これはかなり大変そう。
	実装までは年単位か？ｗｗｗ


■2014.03.25 ver 309
	・PC6001の内部時間を独立させる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までエミュ内の時間はWindowsのローカル時間とリンクしていたが、今後は
	独立したクロックで動かす。
	具体的には、エミュレータ起動時にPCの時間を取得し、P6が動いているときだけ
	クロックを進ませる。メニューを開いたりポーズをかけるとクロック停止。
	BASICから書き換えも可能。但しP6の電源落とす(システム再起動する)と
	再びWindowsの時間で初期化される。

■2014.03.22 ver 309
	・音声合成の固定語WAVが存在しないときはTTS(Text to Speech)を使ってWindowsに
	喋らせるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	言語に日本語が選択されているときは日本語で、英語が選択されているときは
	英語で喋るよー。

	/*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*/
	[メモ]
	
	まずWindowsの音声合成について。
	Windowsには標準で音声合成エンジンが搭載されている。アプリケーションからは
	SAPI(Speech Application Programming Interface)経由で使用する。
	その中でテキストを音声で読み上げる機能がTTS(Text to Speech)。
	Microsoft Officeなどの原稿読み上げで使用されている(使った事無いけど)。
	エミュレータからはそのTTSを使ってテキストを読み上げさせる。
	
	次にWindows上で音声合成を使用する環境について。
	コントロールパネルの[音声認識]ダイアログを開くと[音声合成]というタブがあり、
	その画面の[音声の選択]の登録リストに表示されているのが、現在 Windows上で
	使用できる音声合成の種類ということになる。
	Xp以降の標準状態だと英語ボイスだけインストールされた状態のはず(…多分)。
	(※ Ultimate版Windowsだと日本語ボイスも入っているとのこと。
	後はMS-Officeをインストールすると日本語ボイスも登録されたりするのかな？
	良くわからないけど…。少なくとも我が家の Win8.1+Office2013のPCには日本語
	ボイスも入ってます。)
	
	既に英語と日本語のボイスが登録されているPC環境の場合は特に何をする
	必要は無し。以降は日本語ボイスが登録されていなかったときの対応。
	
	基本的にSAPI対応の音声エンジンは、MS-Officeを入れるにしても、Ultimate版
	Windowsを用意するにしても、サードパーティ製の音声エンジンを買うにしても、
	安くない費用がかかるわけだけど、実はマイクロソフトではSAPI用エンジンとは
	別のMSP(Microsoft Speech Platform)という音声エンジンを無料配布している。
	もちろん言語毎のボイスも全て無料配布。
	
	このMSP、インストールしただけではSAPI経由でお喋りさせる事は出来ないが、
	レジストリに手を加えるとSAPIからもボイスを使用できるようになる…というので、
	そのやり方で利用させてもらう。
	
	詳細はネット検索すると色々出てくるのでそちらを参照してもらうとして、
	取り急ぎ使えるようにする最低限の手順だけ箇条書き。

	まずはMSPのランタイムを以下のサイトからダウンロードしてインストール。
	(x86/x64はインストールするOSのタイプで選択。)
	
	Microsoft Speech Platform - Runtime (Version 11)
	http://www.microsoft.com/en-us/download/details.aspx?id=27225
	
	日本語ボイスが必要なら下から追加インストールする。
	"TTS"と付いているのが音声合成エンジンなので、それを選択。
	因みに"SR"と付いているのは音声認識エンジン。
	
	Microsoft Speech Platform - Runtime Languages (Version 11)
	http://www.microsoft.com/en-us/download/details.aspx?id=27224
	
	MSPのレジストリに登録された"Token"情報をSAPIのレジストリにコピーする。
	管理者権限でコマンドプロンプトを起動して、以下のコマンドを実行。
	
	reg COPY "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech Server\v11.0\Voices\Tokens" HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens /s /f
	
	(※ レジストリ変更は個人の責任において実行してください。既にTTSの
	古いバージョンがOSにインストールされていて、それをSAPIに登録したい
	というケースの場合、レジストリパスのバージョン部分の表記を確認し、
	適切なバージョンパスに書き直してからコマンドを実行して下さい。)
	
	以上。
	
	
	ボイスの登録情報をコピーするだけで使えるようになるということは、エンジンの
	中身はSAPI用もMSP用も同じってことだろうけど、どうしてMSは別扱いしているの
	だろう？ やはり高いパッケージにローカルボイスを入れてしまった手前、
	WEBで無料配布するのはまずいという判断なのだろうか？
	
	/*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*/

	・ということで、試しにシステムウィンドウの方で英語で流暢に喋らせてみる。
	エイプリルフール向けのネタ。直ぐに消すｗ。
	Windowsの音声合成も日本語に関してはP6と似たような間抜けボイスだと思う。
	抑揚が変なんだよね。


■2014.03.19 ver 309
	・ウィンドウモードのときはマウスカーソルの自動消去を行わないようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メニュー選択の最中にマウスカーソルが消えてしまうと困るので…。


■2014.03.18 ver 309
	・64bitモジュール作成。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	x64のモジュールを作ったとき、プロジェクトの構造体メンバアライメントが
	1バイトに設定されていると、Direct3DのCreateDeviceでエラーになる。
	この原因が判らずに、一週間ぐらい嵌った…(；´Д｀)はぁはぁ
	もちろん32bitコンパイルでは問題なし。


	・やっぱり、64bitモジュールは保留。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	32bitの方が動作速度が全然速かった。
	エミュレータでは1バイト単位のメモリアクセスが基本だからx64だとオーバー
	ヘッドが大きすぎるのかもしれない。プログラム中でも特に大量のdouble計算
	するわけでもなく、大量のメモリを使うこともないので、わざわざ手間掛けて
	64bitコンパイルする必要もないかな？…というのが今の結論。


■2014.03.13 ver 309
	・メニューバーの再描画制御部の作成。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DirectXとメニューバーの組み合わせは色々と面倒。ただ表示させておくだけだと
	メニューのチラツキやアスペクト比の崩壊が起こるので、ウィンドウモードの
	ときはエミュレータスクリーンを描画制御して、フルスクリーンのときは
	メニューバー自体を動的に実装したり解除したり…うぬぬぬ(`皿´;)

■2014.02.20 ver 309
	・D88イメージにて、セクタサイズが0であるにも関わらず256バイトの0x00データ
	ブロックが存在する特殊セクタに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	D88のセクタヘッダでサイズが0の時は直後の16バイトを精査して、何か数値が
	入っていたら次のセクタヘッダが並んで格納されていると判断。
	全て0x00だったら、256バイトの0x00ブロックが含まれているとして、
	次セクタアドレスは +256 して読み込ませる。
	
	秋川さんによると、dittで吸い出しを行った時、不具合でそのようなセクタが
	作られることがあるようで、P6Vも対応済とのこと。
	自分はその手のD88イメージに遭遇したことは無いけど、セクタサイズを
	加算してオフセットを動かしているので、そのようなD88を読み込ませると
	確実に問題が起きるだろうな。

	・READ_DIAGNOSTIC に対応してみる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	少し前にメール上で行われたDISKプロテクトの話題の中にDIAGNOSTICを使った
	プロテクトがあるということを思い出したのでコマンド対応。
	
	DISKの物理仕様とかバッ活で培った怪しい知識しかないので、
	ただコマンドが動くだけの大雑把な対応しかしていないのだけど、

	[GAP3][SECTOR][GAP3][SECTOR][GAP3][SECTOR]
	|<-- READ SIZE -->|

	こんな感じでセクタ区切りとGAP3を並べて読み込みサイズ分返すようにしている。
	GAP3は54バイトで良いのかな？MSXの2DDだとそんな感じ。


■2014.02.19 ver 309
	・メニューの文言を見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	GUIを作成した時期によって単語にバラつきがあるので(例えば、"Directory"とか
	"Path"とか"Folder"とか…) 出来るだけ統一してみる。
	他、普段"色滲み"と呼んでいるものは本来は"色収差"というべきなのか？それとも
	"アーチファクト"と記述すべきなのか？などと検討して見た結果、
	日本語では"色にじみ"、英語では"Fringe Effect"としてみる。
	英語のwikiでAppleIIの画面解説を読むと"Fringe Effect"と書かれている。
	場所によっては"NTSC Artifact"と書かれている所もあるけど、アーチファクトだと
	カラーバースト誤認識による着色のみならず、もっと広い意味での映像障害に
	なってしまうのかも…。


■2014.02.14 ver 309
	・システムメニューに互換ROM対応チェックボックス追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	このオプションが有効の時はROMパッチが当たらない。
	正規ROMと互換ROMを同居させたいときは互換ROMの方の拡張子を".7x"にして、
	ROMフォルダに置いておくと、優先してそれを読み込むようにしてある。
	"BASICROM.70" とか "CGROM60.70"とか…。

■2014.02.05 ver 309
	・モニタモードのHELPを多言語化。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	なんとも、いい加減な英文。無主語の文章って未だに明確な書き方が判らない。
	MSDNのサイトなどを参考にはしているのだけど、アレはアレでかなり変な文章
	のような気がする…。

■2014.01.30 ver 309
	・機種変更で再起動されたとき、仮名入力を初期化する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	かな入力状態で機種変更リセットを掛けると、そのまま入力モードが継承されて
	いた不具合を修正。

	・FDC_SENSE_INT_STATUS のエラーフラグ設定が間違えていたのを修正。

	・FDC_DATA_READのステータスフラグが間違えていたのを修正。

■2014.01.29 ver 309
	・メニューバーの追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Windows8のタッチパネルから弄りやすいようにメニューバーを追加してみる。
	マウスを使っているときはコンテキストメニューのほうが使いやすいので、
	それはそれで残す。
	メニュー処理が二重になってしまったので不具合誘発の可能性は非常に高くなった
	かも知れない。共有化の都合上、複雑な作りになっているので、今後、あっちは
	直したけどこっちは直っていないといった不整合が起きそう(´・ω・｀)。

■2014.01.26 ver 309
	・SRの1Dディク読み込み問題の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	READ_DATAのコマンドを実行するときトラックの位置チェックを入れたのが
	トラブルの元。
	どうやら、SRで1Dの下位互換読込を行う時は、SEEKの時だけトラックを2n+1にして
	READ_DATAの時にはそのままセクタ番号nを送り込んでくるらしい。
	その為、1DディスクのREAD_DATAの時にトラックチェックをやってしまうと、
	SEEKされたトラックとREAD_DATAの指定トラックが噛み合わなくなり
	トラック番号が是正されてREAD_DATA内で再SEEKされてしまう。
	そういうわけで、READ/WRITE_DATAコマンドのトラック指定は無視するように
	しておく。

■2014.01.06 ver 309
	・エミュレータモジュールの多言語対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	広範囲に渡って手を入れたので、動くようになるまでかなりの時間を費やした。
	ただし、労力の半分ぐらいは試行錯誤(苦渋。
	リソーススクリプト内のID切り替えだけで表示言語を変更させたかったのだけど、
	どうにも上手く行かないので、結局、DLL方式に落ち着いたのです。

■2013.12.29 ver 309
	・開発環境移行開始。Vista → Win8.1
	・ver308はリリースしないままバージョン繰上げ。→ ver309

==============================================================================
■2013.06.29 ver 308
	・ダイアログのオブジェクト配置を調整。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Windows8だとラベル文字列が表示範囲に収まり切らないので、全体的に配置に
	ゆとりを持たせて間を開ける。

■2013.06.28 ver 308
	・モニタモードに"fmreg4"追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Tiny Music Compiler用の音色テーブルを出力。

	・モニタモード実行中にシステムメニューのclose[x]が押されたとき、
	即座に終了するように修正。

■2013.06.26 ver 308
	・PSG/FMのデフォルトボリューム比を100/40に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	P6er有志による実機検証結果を反映させました。
	この調子で音声合成のボリューム比検証も是非…(^^


	・ブレークポイントのテーブル数を20個に拡張。
	・ブレークポイントを#No.指定なしで設定した時、自動的に空き#No.に割り振る
	ように変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までは#No.指定なしだと#1テーブルにBPが設定されていたけど、これからは
	設定する度に登録#No.が検索シフトして行くようになる。
	BPテーブルが満タンの状態で#No.無しの登録を行おうとするとエラーが出るので、
	不要なBPを消してから再登録してもらう。
	尚、#No.指定BP登録は今まで通り使用可能。

■2013.03.14 ver 308
	・初代機のVDPフォントを実ROMからのダンプイメージに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	実際のROMから取り出したVDPフォントは8バイトx64文字の512バイト構造
	になっているという報告をいただいたので、そちらの形式のファイルも
	読み込めるようにしてみる。

	因みに現在txtファイルから作られる仮VDPフォントは通常のCGROM文字と
	互換性を持たせて、16バイトで1文字の扱いとなっている。

■2013.01.17 ver 308
	・TALK文の速度指定に誤りがあったので修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"F1"のときのOUT(E2H)の速度指定がswitchの判定から抜けていて、デフォルトの
	速度速度にされてしまっていたりして。

■2012.11.15 ver 308
	・サウンド以外のI/OポートアクセスのときにもWAITが加算されていたのを修正。

■2012.11.12 ver 308
	・I/Oポートの処理ポート番号をwordで受け渡すように修正。
	・OUTI ,OTIR ,OUTD ,OTDR命令内部のBレジスタデクリメント位置修正。
	・PC-66のFDC入出力(D0～D3)を行うとき、BレジスタをFDCバッファのインデクス
	として扱うようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	先日、OUTI ,OTIR ,OUTD ,OTDR 命令の内部処理のBレジスタのデクリメント位置に
	誤りがあったという話をゆみたろさんから聞いて、こちらでもソースを確認した
	ところ、別段、引き算の場所が違っていても何の影響も無いよな～と思っていたら、
	何と、PC-66のFDCバッファアクセスはBレジスタをインデクス扱いにして行われる
	というじゃありませんか、奥さん！ THE カルチャーショーック！

	/*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*/
	そういえば、去年のP6オフ会のとき、えすびさん交えてINDRの挙動が変だという
	話をした記憶があるので質問メールを投げたところ、詳細な解説を頂きました。

	ということで、
	「I/Oポートアクセスのポート番号word受渡し」
	「OUTI/D系の内部処理のBレジスタデクリメント位置変更」
	「FDC入出力時のインデクス参照」
	を、セットで実装。
	/*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*//*-*/

■2012.11.09 ver 308
	・SR以前の機種でBUS_REQ_OFFを有効にするオプションを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	P6VWでは拡張機能としてSR以外の機種でもBUS_REQ_OFFを受け入れるようにして
	いたのだが、どうも一部の66/SR共用ソフトでは機種判定無しにBUS_REQ_OFFを
	設定してくるらしい。そういうソフトをエミュで実行すると、機種の如何に
	関わらず必ず高速モードになってしまうので、オプションでBUS_REQ_OFFを
	受け付けるか受け付けないか選べるようにする。

■2012.11.08 ver 308
	・SRモードのグラフィック表示のとき&HC9ポートでVRAMアドレスが切り替わら
	なかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	WindyさんからSRでビットマップ表示中に0xC9ポートを切り替えたときの表示が
	実機と異なる旨の指摘があったので修正。
	0xC9ポートはテキストVRAMのアドレシングしか見ていなかったのだけど、
	グラフィックモードのページも変更になるのか…。
	因みに今までSRのグラフィックVRAMは0x0000固定になっていた。

■2012.11.08 ver 308
	・初代機SCREEN3のアトリビュートが１バイトずれる症状を実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	影響がありそうなソフトというと…エフォームンくらいかな？

■2012.11.07 ver 308
	・[PAUSE]キーで仮名モードに切り替えたとき、N60mkII以降のBASIC画面の
	入力モード表示が切り替わらなかった不具合を修正。

==============================================================================
■2012.03.23 ver 308
	・SRのC1Hポートの204ラインフラグ(bit0)を立てたとき画面表示が204ラインに
	なるように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRの画面高さ実装については随分紆余曲折を経ているので、どうもコレといった
	仕様に確定できていない。

■2012.03.22 ver 308
	・SRのC8Hポートのビットマップフラグ(bit2)を立ててもグラフィック描画に
	移行しないように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	指摘があったので修正。
	Techknowの説明だけだと挙動が分かりづらいところがある。

	・各種イベントステート計算を少数切捨てでなく切り上げで計算するように変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までは double で計算した値を int に入れて、さらにその値を元にCPU実効
	ステップの計算などをやっていたので、誤差が大きかったかも…。

	・上記改修に伴い、タイマー割込のカウンタ微調整を削除。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ステート計算で端数切捨の誤差が出なくなったので、微調整は不要と判断。

■2012.03.18 ver 308
	・UNICODE化、一旦停止。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	収集がつかなくなったのでロールバック(汗。

■2012.02.26 ver 308
	・内部文字列のUNICODE化開始。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	余りにもモニタモードのコマンドラインの取り扱いが面倒だったので…。
	(改行位置が全角か半角かの判定など)

■2011.12.12 ver 308
	・モニタモードのコンソールでIME入力の表示位置の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	IME変換ウィンドウの表示位置はImmSetCompositionWindow()というAPIで変更できる
	はずなのだが、コンソールのコマンドライン上で日本語入力確定の度にこのAPIを
	叩いても表示位置が変更されていなかった。ただし、一旦IMEをOFFにしてから、
	再度IMEをONにすると表示位置の変更が反映される状態だった。何かおかしい。

	MSのサンプルや他のblogの解説ページを読み漁ってみると、どうやらどのIMEの
	API制御もWindowプロシージャ内で行われている様子。
	P6VWではWinProc処理とエミュレータのメインスレッドが別々に動いていて、
	モニタモードは当然エミュレータスレッド側で処理がグルグル回っているので、
	ひょっとしてこれが不味いのではないかと、IMEの座標調整をやるときに、一旦
	WinProcにユーザーメッセージを投げてそっち側のスレッドで座標変更を
	やってもらうように修正したところ、上手く行くようになった。
	どうも、IME処理に関してはアプリケーション側だけで処理を完結しても不足が
	あるようで、DefWindowProc()でシステム側にメッセージを渡して処理して
	貰わないといけないらしい。

■2011.12.07 ver 308
	・トラック1が未フォーマットのDISKの読み込みが出来ない不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	D88イメージ処理については吸出しソフトによってトラックテーブルの作りが
	まちまちなので、色々無茶をして対応していたりする。
	そのせいで、今回のような特に問題の無いDISKが読めなくなったりする副作用も
	おきてしまうので、今後は余り変な形式のディスクイメージには対応せずに
	読込エラーが出るに任せようかと思っている。

■2011.11.15 ver 308
	・モニタモードのコンソールエディットを修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	テキストエディタの様な操作性…とまでは行かなくても、WINやUNIXのコンソール
	程度に融通が効くようにしたい。絶賛改修中。

■2011.11.13 ver 308
	・モニタモードのコンソールでカーソル表示を行うように改修。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今まではカーソルポインタ位置にはアンダーバーの文字を置いていたけど、
	これだと何かやるたびにPOS_Xの一文字戻しを行わなければならず、文字数の計算
	間違いが起こりやすい状況だった。コマンドヒストリーの実行などでは、これの
	せいで不可解な引数エラーが出ることがあったので、コンソールの座標の管理を
	スッキリさせるため、結構広範囲に手を加えた。

	問題点として、カーソル移動の際、グラフィックに描かれた文字から全角・半角の
	判断をつけることは出来ないので、コンソール画面にテキストRAMを持たせて
	そっちで文字種別の判定を行うようにした。
	しかし、これはグラフィックとテキストの二重管理なのであまりスマートなやり方
	とは言えないかも…。
	モニタモードのコンソールを完全なテキストVRAM方式にしてしまい、毎回、画面
	更新のたびに、そのVRAM内容を画面に描画するというやり方もあるのだけど、
	半角・全角に合わせてP6文字に対応させるのはかなり面倒なので、このような
	形で妥協せざるを得ないかな？

■2011.11.13 ver 308
	・モニタモードのステップ実行で、"JP (HL)" のコメントに誤りがあったのを修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"(HL)" の内容を表示するのに、文字通りHLのポインタ表示が行われていたので、
	これをレジスタ値直接表示に変更。
	ニーモニックの参照レジスタを機械的に表示コードに置換してコメント表示テーブル
	にセッティングしたのでこのような誤植が発生してしまった。
	で… "JP (HL)" は何故に "JP HL" という表記ではないのだろう？？？

■2011.11.11 ver 308
	・モニタモードのステップ実行で、前実行と次実行の情報をログに出力しない
	ように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードでステップ実行を行ったとき前実行行と次実行行を表示させているが、
	ログ出力ONのときにこれをファイルに出力してしまうと後でトレース作業がやり辛く
	なってしまうので、画面出力だけにとどめておく。

■2011.11.10 ver 308
	・Vista以降のOS、若しくは特殊な環境上にて、R-SHIFTの入力を受け付けない
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	どうやら、Vista以降のOSだとDirectInputがR-SHIFTを認識してくれない様子。
	GetDeviceState();によるキーボードテーブルにも入ってこないし、
	GetDeviceData();による入力情報取得でも無視されている状態。
	一体どういうことだ？＞MS
	ただし、NOTIFYのハンドラーは飛んでくるので、SHIFTキーの状態を取り込むときに
	R-SHIFTだけ GetAsyncKeyState(VK_RSHIFT); で情報取得するようにしておく。

■2011.11.08 ver 308
	・エミュレータウィンドウの拡大率ステップを10%から5%に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デスクトップの表示上、微妙なサイズのウィンドウにしたいときがあるので
	段階を細かくしてみた。25%表示は潰れ方が少し綺麗。

	・モニタモードの表示用カラー配置を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	部分的に色が変わっている場所あり。

■2011.11.04 ver 308
	・SRのグラフィックモードの並びを修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Windyさんの調査によると、どうもSRのSCREEN2,3の右側のブロック領域は
	左側ブロックと並びが異なっていて、縦ラインが256バイト反復で行ったり
	来たりスキップしながら描画されるみたいだ。
	何というエキセントリックな仕様…(;ﾟДﾟ)
	座標からメモリのオフセットを求める計算式はこんな感じ…。

	offset=((y/16)*256)+((y/4)*64)+(((y>>1)&1)*256)+((y&1)*2)+(x&0xffc);

	VRAM設計が変わったからbmp2p6gなどのユーティリティで作ったSR用のCGなども
	データ配置が変わるのかというと、SRはIOポートで座標を指定しながらドットを
	転送してゆくので、I/OポートとVRAMの描画構造が変わっても、アクセス方法に
	変化はなし。

■2011.11.02 ver 308
	・BASICヘッダ自動判定部の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュレータでは、P6ベタイメージが使用された際、BASICの"Found:xxxx"を表示
	している間にテープのデータが進んでしまってデータロードに失敗する現象を
	軽減するため、ロード開始時のデータ位置から64バイト分のデータを精査して、
	BASICのヘッダを発見した場合それ以前のデータをノイズと判断し、ヘッダの後ろ
	に無音状態を挿入するような支援機能が入っている。
	ポートピアのエンディングはプロテクトのためにプログラムがPRINT#で書き
	出した、短いデータブロックの直後にBASICのプログラムが書き出されるので
	そのPRINT#のデータブロックがノイズとみなされてしまったわけだ。
	今回のケースではそれが悪さをしていた事になる。
	確かに64バイトというのは見過ぎ？

■2011.10.27 ver 308
	・スキャンラインの照度をシステムメニューから設定できるようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今のところ、エミュレータ起動時にスキャンライン用に照度を変更したピクセル
	データとか全て事前計算で準備してしまっているので、エミュ実行に動的に
	照度を変えることとかは出来まへん…

■2011.10.01 ver 308
	・外部テキストとの入出力を P6DatRec や txt2bas のコード変換に合わせる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	LPRINTやLLISTで文字を出力したとき、若しくは[Ctrl]+[V]やTXTファイルD&Dで
	文字を入力するとき、仮名コードやグラフィックコードを受け渡すことが
	出来なかったので、そこに変換関数を挟んで P6DatRec の仕様に則って相互文
	字変換をやってみる。


■2011.09.26 ver 308
	・MODE1-SCREEN1のテキスト描画にも色滲み描画を適応してみる。
		→ [Ctrl]+[F8] トグル切り替え
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ラスター描画のグラフィック画面と違ってテキスト画面は1文字ブロック単位で
	描画行うので、隣の文字のドットを覚えていたりしないといけない分、処理が
	かなり複雑になり、従って描画もかなり重くなっている。
	色滲み処理でフォローしているのはSC4と同じカラーセットだけなので、
	色数が使えるセミグラ画面やMODE5のテキストには適応させられない。
	MODE5の場合、前景15色・背景15色だから、今のやり方だと225通りの滲みケースを
	想定してドットの組み合わせパターンテーブルを準備しなければならず、現方式
	での実現は難しい。やるとしたら、それこそカラードットを一旦ピクセルに置き
	換えて、隣接色との滲みを色計算するようなフルフィルタリングになるのだろう
	けど、まぁ、テキスト画面の滲みは画面を見てノスタルジーに浸るような
	使い方しか出来ないと思うので、あまり変な事はやらないで、現状のままで
	好きな人が好きなときに眺めてニヤニヤ出来る程度で良いのかも…。

■2011.09.25 ver 308
	・J方式のSCREEN4色滲みを実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	J方式とはJOTさんが解析・提案した色滲みドット生成規則のこと。
	今までは、置き換える2ドットだけを見て単純に滲み色に置換していただけだが、
	今回から前後2ドット加えて、合計6ドットの内容から配置されるドットを判断
	して描画を行うかたちとなる。
	結果は一目瞭然。文字などの可読性の向上が素晴らしい！
	もう、オホーツクの文章が読めないとは言わせない！ｗｗｗ
	ただしCGなどは輪郭が崩れる感じなので、ケースバイケースで描画方式を
	選択するのが良いでしょう。

■2011.09.20 ver 308
	・キー入力のバッファリングを二重に行うように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	実行環境によっては、普通にキー入力していてもDirectInputが複数キー同時押し
	扱いで割込ハンドラーにデータを送りつけてくることがあるようなので、
	エミュレータ側のキーボードハンドラーにもスタックを設け、同時入力のコードは
	そこに積み上げて1/60[sec]で順次キーボード割込を発行するようにしてみる。
	…って、SUB-CPUにもバッファがあるから実質三重バッファリングになるのかな？

■2011.09.18 ver 308
	・SCREEN4色滲み描画のエッヂ描画切り替えオプションを追加。→ [Shift]+[F8]
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	輪郭の隣接ドット区切りの照度を落として、文字の輪郭が多少は浮き出るように
	してみる。

	・バッチコマンド実行中に終了されるとdevパスがクリアされる問題修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	…たぶん、直ったはず…。

■2011.09.14 ver 308
	・SHIFT + PgDown のカナ・かな切り替えは既に修正済み。

	・デバッグ用コンソール出力モード追加
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	汎用コンソール。出力された情報を取得できるわけではないので、デバッグ以外
	あまり利用価値は無さそう。

	・仮想ファイルマネージャの仕様変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	VS2005だとポイントと実数キャストで警告が止まらないので…。VS2005はダメだ。

■2011.09.14 ver 308
	・コンパイル環境をVC6からVisualStudio2008に移行。

	開発環境:  WindowsXp Pro SP4 x86 + DirectX9 2006 Summer
	        :   + VisualStudio2005
	        :  WindowsVsita Home SP3 x86 + DirectX10
	        :   + VisualStudio2008
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	これにより、Widows2000が対応環境から外れる。
	キー入力は DirectInput5_lib から DirectInput8_lib に移行。
	・・・したけど、ビス太環境でAcquire/Unacquireの度に十数秒デッドロックが
	掛かるのでやっぱりDirectInput5_libに戻す (ﾟдﾟ)ﾎﾟｶｰﾝ


==============================================================================
■2011.05.04 ver 307a1
	・PC66動作時に於いて、FDD実装数以上のドライブ番号でFDCコマンドを発行した
	とき、コマンドを正常処理していた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	FDDドライブ実装数が1の時、ドライブ2に対してFDCコマンドを発行しても
	ステータスレジスタST0のInvalidフラグが立てられていなかったのが原因…(^^;

==============================================================================
■2011.05.03 ver 307a
	・PC66動作時のVOICE-ROMのバンク切り替えバグを修正。

==============================================================================
■2011.04.07 ver 307
	・F8HポートでCGROMのメモリマッピング先が変化するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	moriyaさん調査によると、F8HポートのLSB3bitがCGROMのマッピング先アドレス指定
	になるらしい。標準ではF8Hには0xC3が設定されているので、CGROMは(3<<1)で
	0x6000にマッピングされる。ところが、PC6601付属のワープロはF8Hに0xC2を
	設定して0x4000にCGROMを読みに行くので、マッピング位置が0x6000固定のエミュ
	だとキャラクターグラフィックが表示されない状態になっていたということ。

■2011.03.28 ver 307
	・モニタモードでurコマンドを使用したとき、バイナリ表示部の3バイト目以降が
	通常のメモリバンク読み込みになっていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メモリバンクでROMが割り当てられたアドレスを、urで逆アセンブラしようとすると
	ニーモニック表示はRAMから取得されたデータで行われているのに対して、
	バイナリ表示部の3バイト目以降は通常のバンク読み込みとなっていて
	ROMからデータが取得されていた（＾＾；

	・デバッグモード情報表示欄のTruckNoをTrackNoに修正
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DOS版からの伝統ですた…(´･ω･｀)

■2011.03.26 ver 307
	・N60SC3のVRAMグラフックモード判定を行うのに、アトリビュー領域全体の
	フラグをチェックするように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	これにより、電源投入時のチェッカーフラグ画面が表示されるようになった。

■2010.12.26 ver 307
	システムメニューの配置をデスクトップのDPIを見て調整するように変更。

■2010.11.26 ver 307
	・システムリセット時のCSSデフォルト値を1に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	実機にてBelugaのFDブートを試験していたところ、どうやらシステムリセット時の
	OUT(&HC0)の値は0xFC(CSS3=1,CSS2=0,CSS1=0 (3bit以上は常にON))に設定されて
	いるらしい事が確認できる。

■2010.11.24 ver 306a
	・資料に即して、初代機の各種パレットを再設定。

■2010.11.23 ver 306a
	・インテリジェンスタイプFDD(mkII用)のコマンドに
		COPY、HISPEED_WRITE_DATA、HISPEED_SEND_DATA を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	PC-8031準拠のコマンド。未対応コマンドはまだ沢山ある。

■2010.11.22 ver 306a
	・PC-6601のハドソンのディスクが起動できなくなっていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DISK_BIOSのチェック中、ハドソンのDISKが起動出来なくなっていた事に気づいた。
	原因はFDCコントローラの作り替えを行ったとき、ステータスチェックが連続で
	呼び出されたときにInvalid扱いになる部分を省いてしまった事。
	uPD765のデータシートを確認したところ、それらしき記述は見当たらないのだが、
	どうやら内部ステータスが変化しない状態でステータスチェックを連続で
	呼ばれるとそのような挙動になるみたいだ。

==============================================================================
■2010.10.18 ver 306
	・PC-6001とPC-6001Aでリセットボタンが押されたとき、CMTのリレーフラグが
	ONになっている時以外はリレー音を鳴らさないように修正。

■2010.10.16 ver 306
	・エミュレータ終了時のウィンドウの倍率を記憶するようにする。

■2010.10.16 ver 306
	・パレットのRGB設定値を6bit(0-63)から8bit(0-255)に拡張。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	要するにAllegro互換を廃止。
	INIファイルで大々的にパレットをカスタマイズ出来るようにしたので
	RGB値の方も分かりやすく8bitにした方が良いかと思って…。

	そういう訳で、本改修により、SC4の色滲みパレットのRGB値を自分で調整していた
	人は、RGBの各バイナリをそれぞれ4倍にして書き戻すようにしないと、照度が
	1/4になってしまうので注意が必要。

■2010.10.15 ver 306
	・各スクリーンモードのパレットをINIファイルから読み込むように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	使用者が自分の実機環境に合うようにパレットを弄れるようにする。

==============================================================================
■2010.09.19 ver 305f
	・電源制御によるモニタ電源OFFやシステムスタンバイなどの発動を抑止。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	これらの機能は、XpまではWindowメッセージで対処することが出来たが、Vistaに
	なってからは対処できない状態になった。そこで、余りやりたくなかったけど、
	レジストリを変更して対応させるように修正。

■2010.09.16 ver 305f
	・DirectSoundのセカンダリバッファが60[ms]固定になっている不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	INIファイルの"sound_buff"の値が反映されていなかったりして…(^^;

==============================================================================
■2010.09.03 ver 305e
	・スクリーンセーバー抑止フラグのパラメタがINIファイルに反映されて
	いなかった不具合を修正。

==============================================================================
■2010.07.07 ver 305d
	・エミュレータウィンドウの位置を記憶するように修正。

==============================================================================
■2010.06.29 ver 305c
	・デバイスロスト発生時、グラフィックデバイスを全て初期化するように改修。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュレータ起動中にログイン画面やスリープモードに移行すると、
	Direct3DやDirectDrawのデバイスロストが発生して画面が描画できなく
	なってしまうので、一旦グラフィックデバイスを終了させて再起動させる
	仕組みを実装。

■2010.06.27 ver 305c
	・RecStream で断続的に録音・停止が行われたとき、その都度、WAVのファイル
	サイズを書き出してファイルクローズを行うように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	これにより、今までの様にエミュレータを終了せずとも、p6streamファイルを
	Winampなどで再生できるようになった。

■2010.06.27 ver 305c
	・RecStream で作られるWAVファイルのヘッダ設定に不具合があったのを修正。

■2010.06.27 ver 305c
	・AY-3-8910のレジスタラッチで16以上の値を受け付けていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	不具合が発露したのはAX1～4のデモプログラム。このデモプログラム、音楽が
	始まる直前になぜか 16～21 の未使用レジスタに対してデータ出力を行なおうと
	する。具体的には 07～21 のレジスタに対してループで同一データ値を出力しよう
	とするのだけど、これはコーディング上、単にいい加減なやり方を採っただけ
	だろうな。実機では未対応レジスタに出力しても何も起こらないし…。

	ところが、P6VWのサウンドI/OではFM/PSG/SCC/MIDIの受け取りがあって、
	間口が広くなっているもので、初代機とmkIIでFMカートリッジ未実装の時でも
	非対応レジスタラッチを受け付けるようになっていた。

	FMカートリッジを実装しているときはサウンド出力データはYM2203に
	流されるので16以上のレジスタ番号に出力されても問題はなかったけど、
	AY-3-8910の方に流れてしまうと波形が無くなってしまうという問題が
	発生していたわけだ。


==============================================================================
■2010.06.25 ver 305b
	・エミュレータ起動時、レジストリを弄ってスクリーンセーバーを無効にする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	「パスワードによる保護」でスクリーンセーバー起動設定だと、マウス移動や
	キー入力のメッセージを投げてもセーバーの起動をキャンセルできないことが判明。
	最終手段としてレジストリ値を直接改変する様にする。
	本当はレジストリ弄るのは余り気が進まないんだけどね。エミュが例外エラーで
	落ちたりすると、設定が変更されたままになってしまうし…。
	しかし、サーフェスロストの対処が難しいとなると、スクリーンセーバーの方を
	無理矢理にでも抑えこむ必要があるよな～(´・ω・｀)
	
	変更するレジストリの項はコレ。
		HKEY_CURRENT_USER\Control Panel\Desktop\ScreenSaveActive

==============================================================================
■2010.06.23 ver 305a
	・59秒に1回ダミーのマウス移動コマンドを発行するようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュレータ起動中にスクリーンセーバーが起動するとサーフェスロストが
	発生してしまうという報告を受けて調査。
	エミュレータにフォーカスがあるときはスクリーンセーバーは抑止されるが
	フォーカスが外れている時は、セーバーが起動してしまう状況は確認。
	しかし、報告によるとフルスクリーンで動かしていてフォーカスが取得されて
	いる状況でもセーバーが起動してしまう状況にあるらしい。
	色々調査してみたところ、どうもパスワードロックが掛かった設定で
	スクリーンセーバーが起動されたとき、WM_SYSCOMMAND:SC_SCREENSAVE　で
	メッセージをブロックしても、セーバーが起動されてしまうことが判明。
	その為、スクリーンセーバー起動定時間の最小単位1分より1秒短い59秒ごとに
	マウスの座標移動(SetCursorPos())を発行するように改修。
	マウスの現在地を取得してそれをそのまま投げているので、勝手にマウスが
	動くようなことは無い。

■2010.06.17 ver 305a
	・通常実行画面にバッチファイル(p6b)をドロップした時でもモニタコマンド
	全般を実行出来るように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	本来、通常実行画面はモニタモード画面と違ってコマンド処理のメインループを
	通らないためモニタコマンド処理は出来ないのだが、バッチファイルがドロップ
	されたときに限って、バッチが終了するか"go"命令が使用されるまでのコマンドを
	一気に実行するようにした。
	モニタモード実行時はブレークポイントで停止した瞬間、"go" 以降のコマンドが
	引き続き実行されるが、通常実行画面では "go" 以降にコマンドが仕込まれていて
	ブレークポイントに引っかかったとしても、それ以降のコマンドは実行される
	ことが出来無い。

==============================================================================
■2010.06.11 ver 305
	・モニタモードのバッチ処理(p6b)内で、コマンド全般を使用出来る様に仕様変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今まではp6bによるバッチ処理に於いては、バイナリファイルの読込にしか対応して
	いなかったが、本バージョンからは全てのモニタコマンドを実行出来るようにする。
	そのため、今まで使用していたバッチファイルはコマンド形式(loadmem,setbin)
	に書き換える必要あり。
	これに伴い、WEBのモニタモードコマンド説明の loadbin,setbin,savebin,getbin,bat
	の項を書き直し。

	・引数なしで "setbin" コマンドが実行された時のファイルセレクタを
	フルスクリーン状態でも使用できるように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	もはや、画面制御に Allegro を使っていないので、フルスクリーンと
	ウィンドウモードを区別する軛から開放されてるもんね～ (´∀｀)。

==============================================================================
■2010.05.31 ver 304
	・SRモードのテロップ表示の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRモードのテロップ表示用のTALK文字列参照アドレスは、mkIIや66と異なり、
	FILESの数とCLEARの設定値によって動的に移動してしまうので、それらの
	パラメタに合わせて該当アドレスを算出するようにした。

■2010.05.30 ver 304
	・音声合成再生時のステータスフラグの立て方を見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRモードで連続したTALK命令を実行すると、前行のTALKが終わらないうちに
	次々に次行のTALK命令実行に移動してしまう状態だった。
	SRモード時のTALKのフォルマント送信はVOICE割込によって行われるため、
	割込発生間隔でBUSYフラグのON/OFFが行われると、音声合成作業中の判定が
	出来ずに次行のTALKに移行して、状態がリセットされてしまっていた。
	mkIIと66では2フレーム、2/60[sec]分の波形が再生バッファに溜まってから
	7752の状態をBUSYに変化させていたのだけど、SRでは1フレーム分のフォルマントを
	受信した段階でBUSYフラグを立ててしまい、VOICE割込でもBUSYを検知出来るように
	調整した。

■2010.05.29 ver 304
	・システムメニューが起動される度に、CPU速度調整値とタイマー調整値が
	入れ替わってしまう不具合を修正。

==============================================================================
■2010.05.08 ver 303a1
	・システムメニューにおいて、HighSpeed TapeReading の設定状態をINI
	ファイルから取得出来ていなかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	前々回、新たに追加したジョイスティック交換用パラメタの格納変数が
	HighSpeed TapeReading の変数名になっており、ジョイスティック交換
	のパラメタ値が上書きされていたための不具合。デグレです(^^;
	

==============================================================================
■2010.05.07 ver 303a
	・P6VWをモニタモードで使用中、[ALT]+[TAB]でフォーカスが移動されたとき、
	バイナリエディタに制御が移らないように修正。

==============================================================================
■2010.04.09 ver 303
	・「JOYSTICK1,2の交換」を実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	この機能が有効になるとJOYSTICK1 が JOYSTICK2 扱いに、JOYSTICK2 が
	JOYSTICK1 扱いになります。

	・SAVETAPEをイジェクトした後、新しいSAVETAPEをマウントせずにCSAVEを
	行うと、デフォルト作成ファイルが拡張子だけ".P6"になってしまう
	不具合を修正。


■2010.04.08 ver 303
	・INIファイルが存在しない状態でエミュレーたを起動させたとき、
	機械的動作音が鳴らない障害を修正。

	・PSGストリームのRCフィルタを除外。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	PSGストリームに破断ノイズが乗っていたため…(^^;

==============================================================================
■2010.04.04 ver 302a1
	・機械的動作音のオプション状態が反映されていなかった障害を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	INIファイルの読み取り項目名文字列に誤植があったりして…(^^;
	FALSE:"sound_mechanic"  --> TRUE:"sound_mechanical"

==============================================================================
■2010.04.02 ver 302a
	・初代機モードでのディスクI/Oに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ディスクI/OはmkIIと同様に 0xD0～0xD3 。PCS-6001R 拡張BASIC-ROM を実装すると、
	DISK関係の命令が使えるようになる。

==============================================================================
■2010.03.21 ver 302
	・SR動作時、N66モードからリセットでなくI/Oポート操作でSRモードに移行した
	とき、VRAMアドレスがN66モードのままになってしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	具体的な現象事例はSRメニューの「TV予約」画面に入った後、終了ボタンを押して
	SRメニューに戻ってきたとき、VRAMのアドレスが「TV予約」のテキスト画面の
	アドレスを保持しているため、SRメニューに戻るとグラフィックの描画位置が
	ズレてしまっている。これはSRモードで 0xBO ポート出力が行われたとき、
	VRAMアドレスの切り替えをスキップする仕様になっていた事が原因。
	本来、SRモードではVRAMの切り替えが必要ないため、N66以前の時しか有効に
	ならないようにしてあったのだが、上の「TV予約」の挙動を見るに、SRモードの
	時に0xB0ボートが設定されるとVRAMアドレスもアトリビューも0x0000に初期化
	されるのが正しい仕様みたいだ。

■2010.03.20 ver 302
	・短時間に連続テロップ表示を行うとエミュがハングアップする事がある
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ver301aの対処でも問題が発生するということなので、テロップ描画の頻度を
	2秒単位に切り上げるように変更。音声ポートへの連続出力が行われても、
	前回のデータ出力から2秒以上経過していなかったら、テロップの描画を
	抑制するように変更。

	・エミュレータウィンドウの最大化ボタンで画面を拡大したとき、画面の
	アスペクト比を保つように修正。

■2010.03.18 ver 302
	・初代機の128x192モノクロモードで描画幅が2倍になっていた不具合を修正。
	・初代機の128x96カラーモードで画面最下部の1ラインが描画されていなかった
	不具合を修正。
==============================================================================
■2010.02.04 ver 301a
	・エミュレータメニューのFDD装置セットアップ項目を変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	FDD装置については、システムメニューの設定内容とエミュレータの設定内容が
	噛み合わなくなるのは使い辛いので、エミュレータメニューからもドライブ数を
	選択出来るように改修。

■2010.02.02 ver 301a
	・短時間に連続テロップ表示を行うとエミュがハングアップする事がある
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	uPD7752音声出力が短時間に連続で呼び出され、テロップインジケータ "*"  の
	描画が連発されるとグラフィック描画の排他処理でロックされたまま動かなる
	環境が存在するので、テロップインジケータの描画を行う場所を、ウィンドウ
	スレッドからエミュレータスレッド側に移動して、クリティカルセッションの
	競合が発生しにくいように修正。

	・IN(0x94)で8255のポートAの値が返っていなかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	IN(0x94)はマニュアル上では未定義ポートとされているが、実際はIN(0x90)と
	同じ働きをするらしい。というのはTERRA4001ではこのポートを利用して
	入力キーコードの判定を行っているから。
	本ポートのサポート自体は "2002.05.18 ver 0.1.10.07a" と、随分前に実装済み
	だったわけだが("history100.txt"参照)、開発を進める上でソース内の変数名を
	整理したときに誤ってポートCの変数名を書いてしまったらしい。
	他もデグレードを起こした箇所がありそうで多少不安…。

==============================================================================
■2010.02.01 ver 301
	・Z80未定義命令の未実装コードを実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	bookwormさんより、(IX+d)系の複合命令が動かないとのご指摘により
	調査してみたところ、本当にゴッソリと命令が抜けていたりして…(^^;
	今まで全く気がつかなかったデス。

	実装したニーモニックは以下の通り。

	LD r,RLC (IX+d)
	LD r,RRC (IX+d)
	LD r,RL (IX+d)
	LD r,RR (IX+d)
	LD r,SLA (IX+d)
	LD r,SRA (IX+d)
	LD r,SLL (IX+d)
	LD r,SRL (IX+d)
	LD r,SET b,(IX+d)
	LD r,RES b,(IX+d)

	"DD,CB,d,00" - "DD,CB,d,3F" , "DD,CB,d,80" - "DD,CB,d,FF"

	・モニタモードコマンドに "di"(割込禁止) と "ei"(割込許可) を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デバッグトレースを行っている途中に割込が発生すると鬱陶しいので、
	コマンドラインから設定出来るようにしてみる。
	割込状態を変更したことを忘れて "go" したりすると、予期しない動作を
	することになるので注意が必要かも…。

==============================================================================
■2010.01.21 ver 300a1
	・[Rec VOICE] を使って出力される音声合成の周波数を10[kHz]に修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	音声合成に関しては uPD7752が生成した10[kHz],10[ms]のブロックを
	WAVストリームに乗せる為に44.1[kHz]に線形補間伸長しているのだけど、
	この加工のせいで波形の頭が尖ってしまい、プチノイズに聴こえて
	しまっている模様。線形補間と言うのは要するに折れ線グラフなので、
	まぁ、そうなってしまう。
	現時点、エミュレータ内で滑らかな波形加工を行うのは難しそうなので、
	とりあえず [Rec VOICE] で出力されるWAVを10[kHz]のままのデータにしておいて、
	このファイルを高精度リサンプリングすれば44.1[kHz]の綺麗な曲線に変換
	することが出来る。
	そういったワケで、綺麗な音声合成を利用したい時には、一手間掛けて
	[Rec VOICE] を利用してもらうということで…（＾＾；
	音声合成の綺麗なリサンプリングは時間がかかりそうなので、
	懸案事項ということで後回し。

■2010.01.21 ver 300a1
	・N66SRのBASIC上でTALK命令を実行したとき、正常にテロップ表示が行われない
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	尤も、SR-BASICの音声合成は上手く波形が生成出来ていないけど…(ﾟ∀ﾟ；)

■2009.12.03 ver 300a1
	・N66_SC3 の状態で CRT_KILL を ON、OFF 繰り返したとき、CRT_KILLの繰り返し
	表示パターンが最初にCRT_KILL状態になった時のデータパターンで固定されて
	しまう不具合を修正。

■2009.12.01 ver 300a1
	・JOYSTICKデバイスの強調レベルをバックグラウンドに変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	JOYSTICKトリガーのキャリブレーションを行った後エミュレータ実行に戻ると、
	JOYSTICKがニュートラル状態にも関わらず最後に押したボタンが押されっぱなしに
	なってしまう現象が発生していた。
	どうやら DirectInput では、Unacquire 状態の時にJOYSTICK操作されると、
	Aquire 時にそのときの最終入力がデフォルト状態として固定されてしまうらしい。
	ナンデヤネン(ﾟДﾟ)？

■2009.11.28 ver 300a1
	・JOYSTICK方向軸のニュートラル状態に10%のデッドゾーンを設ける。

==============================================================================
■2009.11.18 ver 300a
	・Windows Vista/7 環境上でDirect3D描画モードを選択したとき、スクリーンに
	ドットズレが発生する不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Direct3Dのテクセル座標をを0.5ドット分補正。理由は以下のリンクを参照。
	http://msdn.microsoft.com/ja-jp/library/bb219690(VS.85).aspx

■2009.11.07 ver 300
	・今まで1Dや1DDの規定サイズと異なるベタイメージを読み込ませたとき
	標準で2DのD88イメージに変換していたが、2Dのディスクサイズに
	満たないイメージを2DのD88に変換するとトラックアクセスに不都合が生じる為、
	1DDサイズ以下のイメージは1Dとして変換するように修正。

==============================================================================
■2009.11.01 ver 300
	・TALK命令実行時、音声合成WAVの保存と共にフォルマントデータを
	記録するように改修。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	TALK命令を実行したときフォルマントデータをファイルに出力できれば、
	フォルマントを使ったアプリケーションも作りやすいだろうと思ったので、
	昔、音声合成を研究していた(ciscさんのuPD7752風味音声合成エンジンが
	存在しなかった)頃に実装されていたデバッグ機能を、古～いソースから
	引っ張ってきたのデス (ﾟ∀ﾟ)。

	・エミュレータメニューにサウンドレコーディングメニューを追加。

	・Voice Recording の切り替えスイッチがエミュレータメニューに移行したこと
	により、システムメニュー[Option2] 画面の [Voice Recording] 項目を廃止。

	(※本バージョンよりベータ表記を取り除きます。)

==============================================================================
■2009.08.15 ver 300 beta 6
	・INIファイルからクリップボードのサイズ取得に失敗していた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	取得する項目名の文字列に誤植があって、起動時に設定パラメタが取得できずに
	常にクリップボードはデフォルト4KBになってしまっていた(^^;

==============================================================================
■2009.08.04 ver 300 beta 5
	・[Pause]キーを押して仮名入力切替を行ったとき、有効になった瞬間、無効に
	戻ってしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	旧Allegroバージョンのとき、キーボード割込で[Pause]キーが取得できなかった
	為に、Vsyncルーチンで定期的に[Pause]キーを監視していて、[kana]キーの
	コードに置換してキーボード割込みを発行していた。
	その処理コードが現バージョンにもそのまま残っていたために、DirectInputによる
	正規の[Pause]キー受付とVsyncによる[Kana]発行が二重に行われ、瞬間的にON/OFF
	切替が発生して仮名状態が変化していなかった次第…。
	というか、どうしてAllegroは [Pause] キー入力を受け取れなかったのだろう？

■2009.08.03 ver 300 beta 5
	・モニタモードのブレークポイント有効/無効切替コマンドのブレークポイント番号、
	省略時のデフォルト番号が存在しない 0番になっていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ブレークポイント番号は1～10の範囲なので、初期値を1になるようにする。

■2009.08.03 ver 300 beta 5
	・エミュレータメニューから、仮名／カタカナ切替やスナップショット取得など、
	ダイアログを介さずに直接実行されるコマンドを行ったとき、直前に実行した
	メニューコマンドを再度実行してしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	直接実行コマンドを行うとき、コマンド実行の返値(グローバル)が初期化されて
	いなかった為、直接実行コマンドの後に前回実行されたコマンドの返値を見て、
	後始末処理が走っていたのが原因。変数の初期化は忘れずに（＾＾；

■2009.07.29 ver 300 beta 5
	・モニタモードウィンドウから通常ウィンドウに戻ったとき(ウィンドウサイズが
	小さくなったとき)、画面にゴミが残ってしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュのウィンドウサイズを変更したあとデスクトップに対して再描画メッセージ
	を出していたのだが、どうも再描画メッセージを出した直後にDirectXの画面転送が
	走ってしまい、デスクトップに残像を残してしまっていた様子。
	スレッドの停止やDirectDrawの解放、ウィンドウサイズ変更など、スクリーン
	サイズを変更するプロセスの実行順番を入れ替えて試行錯誤したところ、正常に
	残像が消えるようになった。

==============================================================================
■2009.07.21 ver 300 beta 4
	・モニタモードのファンクションコマンド実行の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コマンドのエスケープシーケンス解析に文字数カウントの不具合があり
	改行コードが含まれない命令を実行すると、バッファの後部に余分な文字列が
	付いていると解釈されていた。

	・モニタモードのブレークポイント命令に有効/無効切替を追加。
	ついでに、逆アセンブル表示が行われたとき、ブレークポイントが判るような
	表示にしてみる。

■2009.07.17 ver 300 beta 4
	・FDDを2にして、DISK1・DISK2の基本パスが同じで、尚且つ、両方とも
	アンマウント状態のとき、ディスクイメージが同じであるという
	警告ダイアログが出現してしまう不具合を修正。


==============================================================================
■2009.07.15 ver 300 beta 3
	・モニタモードのバイナリ表示にRAMとMEMの切り替えを追加。
	MEMはメモリバンクに即したバイナリ内容を表示する。
	[End]キーを押すとRAMとMEMのチェンジ。
	MEM表示状態のときに[Tab]でバイナリエディットに移行された場合、
	自動的にRAM表示に切り替える。

■2009.07.12 ver 300 beta 3
	・(IX+d)、(IY+d) の実行注釈に d が加算されていない値が表示されていた
	不具合を修正。

■2009.07.11 ver 300 beta 3
	・モニタモードのファンクションキーにコマンドマクロを実装。

==============================================================================
■2009.07.02 ver 300 beta 2
	・DISK1,2 の基本パスが同じディレクトリを指していて、両ディスクイメージが
	イジェクトされた状態でエミュレータが起動されると、DISK2の設定パスが
	" \ " に初期化されてしまう不具合を修正。

	・拡張子の存在しないファイルをドロップしたとき、モニタモードの
	batコマンドファイルとして扱うようにする。

■2009.06.28 ver 300 beta 2
	・拡張子の存在しないファイルをドロップしたとき、例外エラーが発生する
	不具合を修正。

	・モニタモード表示のままエミュレータ実行に戻ってバイナリファイルを
	ドロップしたとき、ファイルを受け付けない不具合を修正。

	・拡張子の無いファイルをドロップしたとき、バイナリ読込バッチファイル扱い
	するように修正。

==============================================================================
■2009.06.27 ver 300 beta 
	・Release.
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ベータ版です(^^;
---------------------------------------------------------------------------
