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

■2020.08.16 ver 400
	・タイマー割込が遅延する障害を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	タイマー割り込みも他の割り込みも同列に扱っていたため、Stick割り込みの
	発行待ちの間、タイマー割り込みが順番待ちで発生しなくなっていた。


	・LDIRなどループ系命令のステップオーバー停止位置が一命令ずれてしまう
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ループ命令が停止位置に達して離脱する前に、余分に一命令実行していた。


■2020.07.22~08.15 ver 400
	・システムメニューのリソース関係のおかしくなっていた個所を修正。


	・内蔵音源とFMカートリッジのデバイスがひっくり返っていた不具合修正。


	・音源デバイスチャンネルが無効のときボリュームのスライダーを無効にする。


	・戦士カートリッジありの状態で撮ったどこでもSAVEデータを、戦士カートリッジ
	なしの状態で読み込んだ時に、エミュレータが落ちる障害に対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	どこでもSAVEのサイズ調整を行ったときの対応漏れ。

	・FMカートリッジの70Hポートが無効にされていた不具合の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	戦士カートリッジの初期化処理でポートの接続先が上書きされていた。


	・戦士3のIN(0x3n)の処理の変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今まではポート0x3nに設定した番号を返していたが、実際には"0"しか返らない
	とのことなので、そのように修正。


	・CMT割り込みのキャッシュデータ返却の遅延が起こっていた問題の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	サブCPUキャッシュ処理の作り直し。


	・サブCPUの作り直しに伴いどこでもSAVEの項目も見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	CHUNK形式だから下位互換とか気にしなくて済んだ。助かった(^^;
	不要な項目はほったらかし、新たに必要になった項目を追加するだけ。


	・全てのPSGチャンネルを左右どちらかに降ると音割れする不具合の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	振幅のゼロクロスが無効になっていたせいだが、ゼロクロスだと音の出始めに
	プチッという破断ノイズが入ってしまうので、最初の波形生成のときから中心補正
	を入れるようにした。因みにSCCチャンネルも考慮するとボリュームがかなり
	小さくなってしまので、SCCの重複は考慮していない。
	PSGに合わせてSCCを何チャンネルか片方に降ると音割れが起こる。


	・拡張ROMモード切替時のメモリ領域確保の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張ROMのサイズが小さいタイプから大きいタイプに変更されたとき、
	ROMを格納するメモリ領域が拡張されていなかった。


==============================================================================
■2019.12.27~04.19 ver 400
	・オンボード音源とFM音源カートリッジのサンドデバイスを分離する。
	オンボードは A0H-A3Hポート。
	FMカートリッジは 70H-73Hポート。

	これにより、FMカートリッジをONにしても非SR機種のA0HポートはYM2203に
	出力されなくなる。
	非SR機種でA0HポートからFM音源を使いたいときのために、FMコンパチブル
	オプションを追加。
	なお、FMカートリッジと戦士カートリッジで70Hポートが衝突する場合は、
	戦士カートリッジの方が優先され、FMカートリッジがアンマウントされる。

	・ボリュームコントロールやPANコントロールを2chip化。


■2019.09.02~ ver 400
	・DirectDrawモードで、I/Fの初期化が終わらないうちに画面描画が走ると、
	例外が発生する不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DirectDrawI/Fチェックはプライマリサーフェスを作る前段階で行っていて
	プライマリ転送の時点ではチェックを行っていなかったため、DDraw初期前に
	いきなり画面転送が呼ばれると、存在しないプライマリサーフェスにアクセス
	が行われ、例外エラーが発生していた。
	通常、描画デバイスへのアクセスは排他処理でブロックしているが、DDrawの
	初期化で失敗すると、描画スレッドが空実行されるだけになるので排他処理が
	行われていなかった。
	と、ここまでが直接的なコード上の原因。

	遠因は、スクリーンの非同期描画。
	DirectX初期化と描画スレッドが平行して動き出すようになったため、
	DDraw初期中に描画スレッドが画面転送を行おうとしてこの現象が発生する。
	同期描画だと問題ない。


	・初代機で拡張RAMを有効にすると画面が描画されなくなる不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	VRAM切替タイミングの対応を行ったとき、VRAMアクセス関数を共通化したため、
	初代機でもMAIN_RAMしか描画されない状態になってしまった。
	初代機ではVRAMに拡張RAMがマッピングされたときは拡張RAMを描画する。

	・どこでもセーブの拡張ROMと拡張RAMの保存サイズを種別ごとに調整。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今まで戦士3カートリッジの互換性試験のために最大サイズで保存していた。
	とはいえ、戦士3もノーマル拡張RAMも共通関数で管理しなければならない都合上、
	SOL2/SOL3以外でもRAMオフセットと実アドレスが等しくなるよう、大きなサイズで
	メモリ確保している。
	あと、ページングの都合上、2のべき乗サイズに切り上げらている。

	┌────────────┬──────┬──────┐
	│カートリッジ種別        │拡張ROM(KB) │拡張RAM(KB) │
	├────────────┼──────┼──────┤
	│RAMカートリッジ         │16(*)       │64          │
	│通常カートリッジ        │16          │64(*)       │
	│MEGA-ROM                │128         │64(*)       │
	│戦士のカートリッジ      │128         │64          │
	│戦士のカートリッジmkII  │512         │128         │
	│戦士のカートリッジmkIII │8192        │512         │
	└────────────┴──────┴──────┘
	(* システム上からは見えないが、エミュレータ内部では確保している。)

	モニタモードで拡張ROM/RAMをダンプすると、上記サイズの実体メモリがダンプ
	される。特にRAMに関しては最低64KBで確保しているので、RAMのないカートリッジ
	を実装してもエミュレータ上では64KBのRAMが実装される。
	どこでもセーブにもそのサイズで保存される。


	・ノーマル拡張ROMを実装しているとき、イジェクトせずに戦士のカートリッジを
	実装するとページマッピングがおかしくなる不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張ROMの読み直しが行われるとき、ページマップとROMセットバンクの初期化が
	行われていなかった

	・非SR機種のN66モードでページ切替時にVRAMアドレスの更新が行われていなかった
	不具合修正。

	・mkII以降の機種で初代戦士のカートリッジを実装したとき、書込バンクのページ3
	が戦士カートリッジの拡張RAMに固定されていた挙動を修正。



■2019.08.24~28 ver 400
	・ストリーム再生バッファをスキップしてしまう不具合に対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	サウンドミキサーからシグナルを受けたあとのバッファ監視間隔を長く
	設定したため、ストリームバッファのブロックがスキップされていた。

	・マルチウィンドウを開いたまま、機種変更などでエミュレータの再起動を
	かけると例外エラーが発生する障害に対応。

	・ボリュームコントロールからボリューム変更が効かなくなっていた不具合修正。

	・モニタモードのバイナリダンプを RAM / InRAM / ExRAM で区別する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードで表示しているダンプの種類を整理する。
	[MEM]    : 読込用メモリバンクのイメージ。
	[RAM]    : 書込用メモリバンクのイメージ。
	[InRAM]  : 内蔵RAMのRawdataイメージ。
	[ExRAM]  : 拡張RAMのRawdataイメージ。


	・InRAM用のバイナリコマンドを実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	loadinram
	saveinram
	din (Dump InternalRAM の略だが、"di"だと割込禁止コマンドとダブるので"din")


	・ExRAM用のダンプコマンドを"de"->"dex"に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Dump Internal RAM が"din"になったので、Dump Extended RAMは "dex"。


■2019.08.06~22 ver 400
	★Windows10でエミュレータの動作が遅くなってしまう現象の対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	えすびさんの検証によりWindows10で動作が遅くなるのはver309以降ということが
	判明したので、ver308→ver309 移行時に対応された処理の見直しを行う。
	+ DirectInputのライブラリのバージョンを変更。(DI8のI/Fは変えない)
	+ マウス情報取得をメインスレッド側に変更。(メインメニューとコンテキスト
	メニューの排他処理を省く。)
	+ マウス情報取得をAPIに変更。(DirectInputでやる必要なし)
	+ コンテキストメニューのチェック間隔を長くする。(リアルタイム検出不要)
	+ デフォルトの画面描画を非同期スレッド型にする。

	★モニタモードのキー入力をシグナル式に変更。
	★モニタモードのメインループを10fpsに変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ドラッグ&ドロップやマウス入力受付、クリップボード処理は10fpsで処理され、
	キー入力は押されたタイミングでシグナルを受けて即反応。
	運用中に反応が鈍いと感じることは無いと思う。
	いや、コンテキストメニューは微妙にディレイが気になるけど、軽快さとの
	トレードオフなので妥協する(^^;


	★DirectInputEventNotifyのWindowメッセージ処理方法の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	キーリピート処理の最中にWindowメッセージの通知が来ると、次のキーイベント
	(離脱)が処理できなくなるタイミングがあるので(キーを押しっぱなしの状態で
	DirectInputがUnacquireされたときとか…)、Windowsメッセージ通知は最優先で
	処理するようにする。


	★Window再描画で画面転送が発生したとき、排他制御されていない箇所があった
	のでそれを修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	非同期画面描画のテクスチャドローとバッティングするとD3Dエラーが出てしまい、
	時と場合によってデバイスがロストしてしまう。


	★Windowの再描画シーケンスを見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Win7とWin10ではWM_PAINTの呼ばれ方が随分異なるため、どちらかの挙動を基準に
	調整してしまうと、他方で過剰描画や描画抜けが起こってしまうため、両環境で
	意図したとおりの挙動になるよう無理やり捻じ伏せたつもり。
	あくまで "つもり"…(^^;

	それにしても、Win7のマルチウィンドウモード時、メインウィンドウに怒涛の如く
	WM_PAINTが流れてくるけど、いったい誰が投げてる？
	シングルウィンドウのときはそうならないので、サブウィンドウ絡みの挙動だと
	思うのだが…。


	★非同期描画スレッドのSleep時間計算の閾値を間違えていたので修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	アイドリング時間が長くなったのでスレッドの負荷は減ったはず。
	ただし、時間監視間隔が大きくなった分、FPS表示に波が出るようになったかも？
	特にWin10。Win7とWin10で結構違いがあって、Win7に比べてWin10はぶん回した
	分だけ重点的に時間を割り当ててくれてるのかな？


	★サウンドストリームの再生ウェイトをシグナル方式に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今まではメインスレッドからサウンドストリームの再生位置を監視していたが、
	これだとメインスレッドの負荷が大きいので、サウンドミキサー側から
	1フレーム分(16ms)の再生区切り毎にシグナルを立ててもらうようにしてみる。
	メインスレッド側の負荷減らしが目的なので、動き的には特に変化なし。


	★無音時のエミュレータ実行ウェイトをタイマーカウント式に変更
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	無音状態の時はサウンドストリームが動いていないので、CPUカウンタを監視して
	ウェイトを取っていたが、例にもよってメインスレッドの負荷が大きいので
	前回のVSYNCからの経過時間を見て出来るだけ大きめのSleepを実行するように
	してみる。
	タイムスライスを手放している時間が長くなったので、若干、実行速度がアバウト
	になった感があるけど、等速実行さえブレなければ良しとする。


	・VRAMアドレスの切り替えタイミングの実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	VRAM領域のバンク切り替えを行った時に即座に表示領域が切り替えられてしまう
	状態だったので、B0ポートやC9ポートなど表示系I/Oポートを叩いたタイミングで
	表示領域が切り替わるようにする。
	この辺、ちょっと全般的な確認は行っていないので様子見コミット。

	・モニタモードのdisasm命令で表示中断できなくなっていた不具合修正。

	・モニタモードのdisasm命令で終了アドレス指定がサイズ扱いになっていた
	不具合修正。

	・ステータスウィンドウにスタック表示追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	スタック情報は意外と良く見るので、表示領域を常設。


	・Asm2Hexのリスティングファイルの形式に個別対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	equ がアドレスマッピングされてしまうので、取り込まないようにする。
	バイナリ行が複数行連続で出力されるのでこれも取り込まないようにする。
	フレキシブルな空白パージだとバイナリ行の先頭のHEXをアドレスとして認識して
	しまうので、Asm2Hexは固定位置からしかバイナリを取り込まないようにする。
	マクロ展開の+記号を飛ばすようにする。

	・メニュー表示から間髪入れず別のモードに移行した時、実行モードに戻れなく
	なる事がある障害に対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メインスレッドとウィンドウスレッドから同時に実行モード変更が行われると、
	メニュー終了後の復帰モード取得がおかしくなることが有るので、復帰モードに
	MENU_SETUPやMENU_WAITなどが設定されないようにする。

	本障害の現象例をメモしておく。

	通常のメニュー処理はこんな感じで実行モードが移行するが…
	;-----------------------------------------------------------------------
	;　　　　　　　　　　　　<エミュレータ実行モード>
	;　[メインスレッド]　　　　　　　　　▼　　　　　　[ウィンドウスレッド]
	;　　　　▼　　　　　　　　　　　　　▼　　　　　　　　　▼
	;=======================================================================
	;　エミュ実行中　　　　　　　　　　<EXEC>
	;　　　　↓　　　　　　　　　　　　　│
	;　コンテキストメニュー開始　　　　　│
	;　復帰モード設定────────→(EXEC)
	;　モード変更──────────→<MENU>
	;　メニュー終了待機　　　　　　　　　↓
	;　　　　│　　　　　　　　　　　<MENU_WAIT>
	;　　　　│　　　　　　　　　　　　　│
	;　　　　│　　　　　　　　　　　　　│
	;　　　　│←──────────メニュー終了
	;　　　　│　　　　　　　　　　モード復帰(EXEC)
	;　エミュ実行中　　　　　　　　　　<EXEC>
	;　　　　↓　　　　　　　　　　　　　↓
	;-----------------------------------------------------------------------

	コンテキストとメニューバーのイベントが同じタイミングで発生した場合、
	;-----------------------------------------------------------------------
	;　　　　　　　　　　　　<エミュレータ実行モード>
	;　[メインスレッド]　　　　　　　　　▼　　　　　　[ウィンドウスレッド]
	;　　　　▼　　　　　　　　　　　　　▼　　　　　　　　　▼
	;=======================================================================
	;　エミュ実行中　　　　　　　　　　<EXEC>
	;　　　　↓　　　　　　　　　　　　　│
	;　コンテキストメニュー開始　　　　　│
	;　復帰モード設定────────→(EXEC)
	;　モード変更──────────→<MENU>
	;　メニュー終了待機　　　　　　　　　↓
	;　　　　│　　　　　　　　　　　<MENU_WAIT>
	;　　　　│　　　　　　　　　　　　　│　　　　　　　メニューバー開始
	;　　　　│　　　　　　　　　　　(MENU_WAIT)←───復帰モード設定
	;　　　　│←──────────メニュー終了　　　　　　│
	;　　　　│　　　　　　　モード復帰(MENU_WAIT) 　　　　　│
	;　　　　│　　　　　　　　　　　　　│　　　　　　　　　↓
	;　　　　│　　　　　　　モード復帰(MENU_WAIT)←メニューコマンド実行
	;　　　　↓　　　　　　　　　　　　　↓
	;　(ずっとメニュー終了待ち)　　(EXECに戻れない)
	;-----------------------------------------------------------------------
	コンテキストメニューの処理中にメニューバーの処理が割込んだりすると、
	復帰モード設定が上書きされて、コンテキストメニュー終了時の戻り先が
	メニュー終了待機になってしまう。

	上記ケースに限らず稀にこういった隙間ケースが存在するようで、待機状態のまま
	入力を受け付けなくなることがあるようだ。


	・リアルタイムモニタのON/OFF切替の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	リアルタイムモニタがOFFの状態で起動されるとON/OFF切替出来ない問題の対応。


	・日本語版コンテキストメニューがどんどん長くなってきたので、英語版同様に
	階層化する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	個人的にはフラットメニューの方が直接的で使い易いのだけど、ここまで数が
	増えると項目を認識するのも時間掛かるし、マウス移動距離が階層メニューよりも
	長くなるし…已む無し。


	・モニタモードのキャレット点滅を復帰。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	画面描画を極力減らすことにしたので、キャレットの点滅を元に戻す。
	因みに、シングルウィンドウのときは自前キャレットを描いているので無限点滅。
	マルチのときはシステムキャレットを表示しているので、Win7では無限点滅、
	Win10だとフォーカス取得後数秒経つと点滅が止まる。
	Win10の挙動はバグなんだか描画最適化なんだか良く分からないけど、OS側の問題
	なのでとりあえずそのまま。コマンドプロンプトはずっと点滅しているので、
	タイマーで定期的にキャレットSHOWを行えば点滅を継続出来そうだけど、
	無駄なのでやらない。


	・マルチウィンドウのモニタモードでブレイク時にサブウィンドウがチラつかない
	ようにする。


	・マルチウィンドウモード時の右クリックペースト仕様を廃止。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	普段、コマンドプロンプトやターミナルコンソールで右クリックペーストを
	多用するので何となく実装していたけど、クリップボードテキストを誤って
	コピーしてしまうことが多発するので、コンテキストメニュー表示に変更する。
	そもそも、コンテキストメニューに "Paste" あるし…。

	・マルチウィンドウモード時、全てのサブウィンドウ上からコンテキストメニュー
	を表示できるようにする。


■2019.08.01 ver 400
	・DISK4の挿入・取り出しが出来なかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ソースコピペして変数名書き換えるの忘れてた…orz


	・モニタモードのステップ実行に割込スキップ機能を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	内藤さん要望により実装。
	デバッガでstep実行している最中に割り込みが発生して、プログラムが割込み
	ルーチンに流れてしまうと、ルーチンから抜けるまでstepのカラ送りをやる
	羽目になり、非常に非効率的なので、step実行で割り込みを検出した場合は、
	自動的に割込み処理をステップオーバーさせる。
	また、トレース中に割込みが発生したことも知りたいので、スキップした
	割り込み表示だけ行う。

	↓ステップ実行中のコンソール上はこんな感じの表示になる。

P6VW>s　　　　　　　　　　　　　　　　　↓s ステップ実行
0FFD C1　　　　　　　POP　BC
P6VW>s　　　　　　　　　　　　　　　　　↓s
0FFE C9　　　　　　　RET
P6VW>s　　　　　　　　　　　　　　　　　↓s
0FD5 2004　　　　　　JR　 NZ,0FDBH
P6VW>s　　　　　　　　　　　　　　　　　↓s
0FD7 10F9　　　　　　DJNZ 0FD2H
P6VW>s　　　　　　　　　　　　　　　　　↓s
0FD2 CD203D　　　　　CALL 3D20H
P6VW>s　　　　　　　　　　　　　　　　　↓s ステップインなのでcallに入って行く。
3D20 2A5DFA　　　　　LD　 HL,(FA5DH)
P6VW>s　　　　　　　　　　　　　　　　　↓s
< INTR [TIMER ] >　　　　　　　　　　　 ★←ここでタイマー割込みが発生。
　　　　　　　　　　　　　　　　　　　　★　割込処理をステップオーバーして
　　　　　　　　　　　　　　　　　　　　★　戻ってきた。
3D23 23　　　　　　　INC　HL

	割込処理をステップオーバーしたときは割込名が表示される。


	また、ステップオーバー中の処理ブロック内で割り込みが発生した場合は、
	割込名は表示されずに戻ってくる。
	ブロックに入っていなければ、割込名が表示される。

P6VW>S　　　　　　　　　　　　　　　　　↓S ステップオーバー実行 
< INTR [TIMER ] >　　　　　　　　　　　 ★←ここで割込みが発生。
　　　　　　　　　　　　　　　　　　　　★　ステップオーバー処理中ではないので
　　　　　　　　　　　　　　　　　　　　★　割込名が表示される。
0FD5 2004　　　　　　JR　 NZ,0FDBH
P6VW>S　　　　　　　　　　　　　　　　　↓S 
0FD7 10F9　　　　　　DJNZ 0FD2H　　　　 ★←ステップオーバー実行された。
P6VW>S　　　　　　　　　　　　　　　　　↓S 
0FCD CDB912　　　　　CALL 12B9H　　　　 ★←ステップオーバー実行された。
P6VW>S　　　　　　　　　　　　　　　　　↓S 
0FD2 CD203D　　　　　CALL 3D20H　　　　 ★←中で割り込みが発生したが
　　　　　　　　　　　　　　　　　　　　★　ステップオーバーのブロック内なので
　　　　　　　　　　　　　　　　　　　　★　何も表示されない。
P6VW>S　　　　　　　　　　　　　　　　　↓S 
0FD7 10F9　　　　　　DJNZ 0FD2H

	割り込みスキップ機能はデフォルトON。
	ON/OFF切り替えは、step命令から行う。
	"s di" で 割込処理をステップオーバー。
	"s ei" で 割込処理にステップイン。


	あと、当然だけど、割込処理ブロック内でスタックの戻りアドレスを書き換えられ
	てしまうと呼び出し元の行に帰ってこなくなるのでステップオーバー実行が
	止まらない。これは既存の "step all" も同じ。
	また、割り込みが IM0、IM1の場合は、そもそも飛び先から戻ってこないので
	ステップオーバーが止まらない(^^;


	・エミュレータReset時に拡張ROMイメージを読み直すようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	内藤さん要望により実装。
	拡張ROMを開発しているとき、ROMイメージを更新するたびにエミュレータの
	終了→再起動をやるのは時間がもったいないので、リセットしただけで
	ROMイメージを読み直す。


■2019.07.30 ver 400
	・n倍実行でエミュレータが落ちる不具合対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デバッグ用の未初期化変数にアクセスして例外が発生していたもよう。

	・ブレークポイントヒット時、前行＋ブレークポイント行、両方表示する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ブレークポイント機能をBP行の実行前に止めるように改修したとき、BPの前行が
	表示された状態で止まるようになったが、確かにそれだとBP設置行と異なる行が
	表示されていて不自然なので、実行前のBP行も表示するように修正。

	・モニタモードコンソールの入力待ちをイベント通知型にしてみる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	RDPなど入力反応の鈍い環境で、少しでも反応を速くするため。
	しかし、速くなったのか？


■2019.07.23 ver 400
	・モニタモードのダンプ系コマンドの終了アドレスが-1されて表示されてしまう
	不具合の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	dump,dumpram,dumpext,dumpeep などを修正。
	例えば、"dump 0 0x1fff" を実行すると 0x0000 ～ 0x1ffe までしかダンプが
	表示されてなかった。


	・SOL3のEEPROMの内容保存を実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	保存されるファイルは、SOL3カートリッジと同じ名前で拡張子が"eep"になる。
	
	例)
	sol3_test.rom    //戦士カートリッジmkIIIの本体
	sol3_test.eep    //EEPROMの保存ファイル

	EEPROMの保存はSOL3を取り出したタイミング。
	EEPROMの復元はSOL3挿入リセットのタイミング。

	・どこでもセーブにSOL3のEEPROMの内容を保存する。


	・SOL3のEEPROMアクセスのアドレスマスクの不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	EEPROMを4KBまでしか確保していなかったときに (EEPROMサイズ - 1) でアドレス
	マスクを実装し、12KBに拡張した後もそのままの実装になっていた。
	要するに、アドレスマスクが0x2fffになっていたので、0x1000～0x1fff の
	アドレスにアクセスすると、0x0000～0x0fff に対して読み書きが行われて
	いた(^^;;ﾅﾆﾔｯﾄﾝ


■2019.07.21 ver 400
	・モニタモードコンソール入力がP6キースキャンに流れていた不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュレータ実行モードのdefineの変更時、P6キースキャン側の対応漏れ。

	・SOL3のROM2ページに書き込みできてしまう障害の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SOL2と同じ判定を通っていたため、SOL3_ROM2がSOL2_SCC扱いされて書き込みが
	許可されていた。

	・モニタモードのコンテキストメニューを表示した瞬間に閉じるとメニューが
	固まることがあったので対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	WindowProcから表示されたコンテキストメニューが出た瞬間に閉じられると、
	メニューが閉じた後にエミュレータスレッドがメニュー待機に入るため、
	メニュー終了を待ち続ける状態になっていた。
	コンテキストメニューが閉じる際はインターバルを置くようにする。


■2019.07.16 ver 400
	・コンテキストメニューのFDD2台マウントのチェック表示不具合修正。

	・拡張ROM挿入時のROM形式ダイアログのラジオボタン表示不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SOL3用のリソースが大量に追加され、リソースIDが大幅にズレ込んだ影響が
	出てるなぁ（＾＾；ﾔﾍﾞｪ

	・ROMセットのアドレス切り替えの不具合修正。

	・SOL2/SOL3のとき、メモリマップの隣にROM-SET番号を表示する。

	・EEPROMの読み書きでブロック範囲を超えたら0x0000にリセットする。


■2019.MM.DD ver 400
	・グラフィックのクリティカルセクションでロックが起きることがあるようなので、
	画面の非同期描画を止める。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードをマルチウィンドウで動かす場合はサーフェス単位の排他処理は
	必要だが、一枚パネルで表示するときは不要なので、排他処理を無効化させる。


	・Direct3D初期化時のVSYNC同期フラグを無効にする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Windows10からDirect3DのVSYNCフラグがウィンドウモードでも有効になる
	ようだ。(前はフルスクリーンの時しか有効にならなかった)
	フルスロットルで動かしても、Direct3DのBegin->Endで、液晶モニタの
	周波数で同期がとられるので画面描画が遅くなっていた。

	たまたま、ビデオカードの出力周波数を30Hzにした状態でプログラムを起動した
	ところ、エミュレータの実行速度をフルスロットルにしても最大"50%"までしか
	スピードが出ない状態に陥ったことにより現象発覚。

	非同期描画をやっていたときは、エミュレータの実行速度と画面の再描画が
	噛み合わなくても問題なかったが、同期描画に移行したために画面再描画の
	インターバルがエミュレータの最高実行速度になってしまった。

	というか、いつからこうい状態になっていたのか把握していない。Windows8から？


■2019.MM.DD ver 400
	・バイナリダンプ/バイナリエディターのアドレスを6桁に拡大。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SOL2の128KBまでの拡張RAMは64KB毎にラベルの色を変えることで64KBページの
	切り替わりを表現していたが、8MBとかのサイズでは対応しきれないので、
	アドレスラベルの表示領域自体を拡大した。

	・EEPROMのREAD/WRITE/DUMPに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"loadeep"(leep) / "saveeep"(sheep) / "deep"命令を作成。

	・戦士のカートリッジmkIII(SOL3)の仕様実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メモリバンクのSOL3対応。
	メモリバンク用I/Oポートの修正。0x3n
	拡張FDD用I/Oポートの新規作成。0xen
	モニタモードメモリバンク表示のSOL3対応。
	モニタモードメモリダンプ表示のSOL3対応。
	モニタモードバイナリダンプのSOL3対応。
	モニタモードバイナリエディタのSOL3対応。
	モニタモードに"sol3"コマンド追加。
	エミュレータメニューのSOL3対応。
	システムメニューのSOL3対応。
	拡張FDDドライブのmount/eject追加。
	拡張FDD用サブシステムバッファ追加。
	拡張FDDドライブのイメージファイル表示追加。


	・コンソールコマンドからのシンボルラベル参照の実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	いつ実装したか忘れたけど、なんか、動いてるっぽい(^^;

	・バイナリエディタから[ESC]でコンソールに戻れない障害対応。

	・二進リテラルとして"0b"プレフィクス(C++14で定義された)を導入。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"&b"は今まで通り。

	・戦士mkIIのメモリバンク設定ダイアログ実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張ROMタイプが戦士mkIIに設定されているとき、"sol2"コマンドを実行すると、
	0x3nポートの設定ダイアログが表示される。

	・モニタモードのキーリピート処理の修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	TABキーを押し続けているとリピート入力が断続的になってしまう不具合修正。

	・モニタモードコマンドに注釈(//)対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	バッチファイルのコマンドに注釈を付けたかったので…。


■2018.09.18 ver 400
	・SRのメモリバンク設定ダイアログ実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRモード動作中に"mb"コマンドを実行すると、0x6nポートの設定ダイアログが
	表示される。

■2018.09.03 ver 400
	・システムメニューのメディア選択ダイアログで選択中イメージと異なる種別の
	メニューが表示されていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュレータメニュー側でメディア種別IDが修正されたのがシステムメニュー
	側に反映されていなかった。


	・DISK1イメージ選択時、DISK1/2イメージ重複エラーが出る時がある不具合を
	修正。


■2018.08.30 ver 400
	・MEGA-RAM(MEGA-ROM内のRAM)をEXT-RAMと同じ扱いにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ROMタイプにMEGA-ROM(Normal/戦士/戦士mkII) が選択されているとき、
	EXT-RAMはON固定とする。

	・ROMタイプにMEGA-ROMが設定されていたら、MEGA-ROMのROMイメージがマウント
	されていなくてもMEGA-ROMバンク切り替えを有効にする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	内部的にMEGA-ROMとMEGA-RAMの実装が分離されたので、戦士mkIIのRAMだけ使いたい
	という場合、ROMタイプだけ戦士mkIIにすればメモリバンク切り替えが有効になる。
	当然、ROMイメージがマウントされていないので、ROMページには空っぽのダミー
	データが入っている。

■2018.08.20 ver 400
	・画面更新のVSYNC同期を廃止。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	オプションの意味としては、メッセージスレッド描画と別スレッド描画の切り替え
	になるので、オプション名も変更。

■2018.08.19 ver 400
	・戦士2カートリッジのバンク切り替え不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	SRモード以外のときバンク切り替えの割当が上手く動いていなかった不具合修正。
	モニタモードのメモリバンク表示も同じ問題があったので修正。

■2018.07.17 ver 400
	・STICK割り込みの返却タイミングを調整。

■2018.07.16 ver 400
	・拡張RAMの書き込み障害を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	書き込みページに拡張RAMが指定されたとき、戦士2カートリッジが実装されて
	いない状態でも0x3nポートのメモリタイプを参照しに行って、disable判定で
	書き込みができていなかった。

	モニタモードのメモリ書き込みコマンドも同様の動きをしていたので修正。

	・メモリ読み書きコマンドの対象をWRITEブロックページに統一する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ダンプウィンドウで拡張RAMが表示されていると、拡張RAMに対しての読み書き
	操作が行われていたが、これは非常に分かりにくかったので、通常のメモリWRITEと
	同じ動きになるように修正する。

	拡張RAMに対する読み書きは専用コマンド(loadexram, saveexram)があるので
	それを使って行う。

	・"ram"コマンドに内蔵RAM出力モードを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	0: WRITEページのメモリマップを出力。(バンク切替対応)
	1: 内蔵RAMを出力。
	2: 拡張RAMを出力。


■2018.07.07 ver 400
	・SRモード時の戦士mkIIアクセスの障害を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	0x6nポートから拡張ROM/RAMを選択したとき、設定したバンク番号を参照せずに、
	ページ番号で0x3nポートを参照しにいっていた。

	・戦士mkIIでROMを割り当てたページに書き込みを行ったときは、RAMの同バンクに
	対して書き込みを行うように修正。

■2018.07.03 ver 400
	・同じブレークポイント設定を重複して受け付けてしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	起動バッチ("devinit.p6b")にブレークポイントコマンドを仕込んで、リセットを
	繰り返して試験していたら、ブレークポイント領域がパンクしてた(^^;

■2018.06.27 ver 400
	・マウス機能の選択スイッチをUIに実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	随分前から試験実装してあったマウス機能を選択できるようにしてみる。
	MSXのバスマウス仕様で実装したつもりだけど、どうも間違ってるっぽい。
	良くわからない。Joystickモードは動いている。

■2018.06.22 ver 400
	・SRの拡張RAMのページ設定の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張RANMバンク切り替えのページ番号のところにバンク番号が設定されていた。
	SOL2対応時のデグレ。

■2018.06.20 ver 400
	・システムメニューのデスクトップDPI補正計算のやり方を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Windows10は動的にデスクトップの倍率を変えてもウィンドウサイズとか
	きっちりついてくるけど、ほかのOSだとDPI変更とTinyモードが重なると
	無視できないズレが出てくるので、DPI補正に合わせてウィンドウサイズは手動調整。

	・システムメニューのTABコントロールのフォントサイズを小さくする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Tinyモードの時は更に小さくする。


■2018.06.19 ver 400
	・マルチウィンドウモードでモニタモード実行時、サブウィンドウを右クリック
	したら、クリップボードペーストするように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ペーストが行われるのは、コマンドラインに制御がある時だけ。
	バイナリ編集中は無効。
	また、メインウィンドウ上をクリックするとコンテキストメニューが出てくるので
	シングルウィンドウモードでは非対応となる。。


■2018.06.17 ver 400
	・getbin/setbin のターゲットをメインメモリから書込ページに変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	メモリバンクの書き込みページに設定されているメモリに対して読み書きを行う
	ように修正。
	要するにメモリバンクの右側の"-WRITE-"に割り当てられているメモリに対して
	操作を行う。
	
	                             ↓ここに割り当てられているページ
	    [MEMORY]   -READ-       -WRITE-
	    0000-1FFF:BASIC[0]    :INRAM[0]
	    2000-3FFF:BASIC[1]    :INRAM[1]
	    4000-5FFF:BASIC[2]    :SOL2RAM[2]
	    6000-7FFF:BASIC[3]    :SOL2RAM[3]
	    8000-9FFF:INRAM[4]    :INRAM[4]
	    A000-BFFF:INRAM[5]    :INRAM[5]
	    C000-DFFF:INRAM[6]    :INRAM[6]
	    E000-FFFF:INRAM[7]    :INRAM[7] 
	
	戦士mkIIのメモリを扱うのに、loadram/loadexram を区別して試験バッチを組むのが
	大変だったので、setbin/getbin はメモリバンクの書き込みページにアクセスするよう
	仕様変更する。


■2018.06.15 ver 400
	・モニタモードのバイナリ検索の不具合修正。

	・モニタモードのオートコンプリートの不具合修正。

	・マルチウィンドウの最小化フラグを保存するように修正。


■2018.05.22 ver 400
	・IN(0xb0)でport(0xb0)のパラメタ値を返していた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	本来は、ReadOnly なので 0xff しか戻らない。

■2018.05.13 ver 400
	・FDCのDISK READコマンド時の返却ステータスの不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DISK_READコマンドでセクタが読み終わったとき、カレントセクタを一つ先に
	進めたCHRN値を返す必要があるので、DISK_READ後にセクタを進める処理を追加。

	また、セクタを進めたとき、トラックの最終セクタを超えてしまった時は、
	次のトラックの先頭セクタをカレントセクタにするように修正。


■2018.04.18 ver 400
	・同じリスティングファイルを多重登録したとき、コメントも多重化されてしまう
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	同じファイルの中では同一アドレスに複数のインストラクションを登録できるが、
	ファイルをまたいで同じアドレスに登録することは出来ないようにした。
	
	今までは、リスト登録を削除せずに同じリスティングファイルを多重登録すると、
	同じインストラクションが繰り返し表示されていたけど、動作テストするのに
	運用回避するのが面倒だったので、排他登録に変更。


	・ステップオーバー実行のレジスタ描画回数を500回に1回に変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までは2回に1回描画だったのでレジスタやVRAMの変化を眺めていることが出来た
	けど、処理の長い"CALL"や"LDIR"などに入ってしまうとなかなか戻ってこなくて
	不便を感じていたので、サクッと処理が戻ってくるように修正。
	まぁ、ステップオーバー中にレジストリ変化を眺める必要性は無いでしょう。
	VRAMの描画をゆっくり確認したいときはスロー実行で。


■2018.04.17 ver 400
	・ASのリスティングファイルに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	先頭行の " AS V1.42 Beta...." を見て、ASフォーマットと認識している。
	情報のレイアウトとか、ほぼ固定値で解析しているので、出力フォーマットが
	変わるとASフォーマットと認識できなくなるけど、これは已む無し。

	プログラム内で"phase"命令が使われると、オフセット変更後のアドレスとコードが
	紐づくので、プログラムがアロケートされた後じゃないとリストの内容が表示され
	ないので、若干不便さを感じるけど、まぁ、作った本人が分かればよいでしょう。


	・コンパイラ擬似命令のみのアドレスを表示させないように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	擬似命令にはバイナリコードが存在しないのでRAM内のコードと0バイト分比較して
	コード一致していると判断していた。
	
	そのため、disasm命令などでインストラクションを表示すると、擬似命令を表示
	した後にアドレス＋０が行われ、ずっと同じアドレスだけを繰り返し表示していた。
	


■2018.04.10 ver 400
	・非同期描画でウィンドウを移動させている最中もスクリーン描画するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	非同期描画のウィンドウ移動中はスクリーン描画が止まった状態でエミュレータが
	稼動していたので、タイマーを立ててスクリーンを再描画するように修正。


■2018.04.09 ver 400
	・SRグラフィックモード表示ページの不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	port(0xC8)のbitmapフラグがOFFのときはVRAMページ切替が無効になっていた。


■2018.03.30 ver 400
	・コンソール開始時の基本操作情報表示の横幅を拡大。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までギッシリと文字を詰め込みすぎて読み辛かったので、多少は改善されたかも。

	・リアルタイムモニター用のステータスバーをメニューから表示切替できるように
	する。


■2018.03.23 ver 400
	・インストラクションニーモニックを表示させるとコンソールの横幅に収まり
	きらないでの、コンソールサイズを大幅拡大。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	しかし、そもそもマルチウィンドウ表示はモニタモードがデスクトップに収まり
	きらない環境でデバッグ出来るようにするため用意したモードだけど(プラス老眼
	対策)、これを拡大してしまったら本末転倒なのかな？
	とりあえず、SVGA(800x600)に収まるサイズに留めておこう。
	(SVGAはデスクトップ版Windowsの最低サポート解像度。)
	
	シングルモードはコンソールとバイナリダンプが横並びになるので1000以上に拡大。

	・"ls"の表示列数をコンソールのサイズに合わせて拡張するように変更。


■2018.03.14 ver 400
	・アセンブラの出力するリスティングファイル読み込み機能を実装。
	"loadlist [<xxx.prm;xxx.lst>]"
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードの"disasm"や"step"実行のとき、合致するアドレスがあったら
	リスト側の文字列を表示する。

	例えば、↓のようなZASMのPRTファイルを読み込ませると…
┌───────────────────────────────────────────┐
│                        ;----------------------------------------------------------   │
│                        ; コードスタート                                              │
│                        ;----------------------------------------------------------   │
│  0000                  CSEG                                                          │
│  EF00                  ORG             SUB_PUTCHAR                                   │
│                                                                                      │
│                        ;----------------------------------------------------------   │
│                        ;処理開始                                                     │
│                        ;----------------------------------------------------------   │
│                        ;                                                             │
│                        ; ORG+0 :キャラクター表示                                     │
│                        ; ORG+4 :キャラクター消去                                     │
│                        ; ORG+8 :転送先VRAMの基準アドレス                             │
│                        ; ORG+10:キャラクタ消去の塗りつぶしワード                     │
│                        ;                                                             │
│                        ;IN-    IX :表示キャラクタのTASKポインタ                      │
│                        ;OUT-   IX以外の全てのレジスタ破壊                            │
│                        ;  #　CALL内でレジスタを保証するより、CALL前に個々で必要な    │
│                        ;  #　レジスタを保守した方が効率がよいので…。                │
│                        ;                                                             │
│  EF00                  LB_PUTCHAR:                                                   │
│  EF00  AF                      XOR     A       ;CY リセット                          │
│  EF01  1809                    JR      LB_PUTCHAR_START                              │
│  EF03  00                      NOP                                                   │
│  EF04  37                      SCF             ;CY セット                            │
│  EF05  1805                    JR      LB_PUTCHAR_START                              │
│  EF07  00                      NOP                                                   │
│  EF08  0000            V_VRAM_BASE:    DW      0       ;VRAMベースアドレス(ORG+8)    │
│  EF0A  0000            CHAR_CLR_CODE:  DW      0       ;キャラクタ消去コード(ORG+10) │
│  EF0C                  LB_PUTCHAR_START:                                             │
│  EF0C  DDE5                    PUSH    IX              ;IX保存                       │
│  EF0E  F5                      PUSH    AF              ;フラグ保存                   │
│  EF0F  F3                      DI                                                    │
│  EF10  3EDD                    LD      A,0DDH          ;RAM切り替え                  │
│  EF12  D3F0                    OUT     (0F0H),A                                      │
│  EF14  AF                      XOR     A                                             │
│                                ;AD_CHRTBL キャラテーブルアドレス計算                 │
│  EF15  67                      LD      H,A             ;H=0                          │
│  EF16  DD6E02                  LD      L,(IX+TCC_CHRNO);キャラ番号取得               │
│  EF19  29                      ADD     HL,HL   ;x2                                   │
└───────────────────────────────────────────┘

	コンソール上でのdisasm表示はアドレスと紐づいている行だけ取り込まれて、
	以下の様なリストが表示される。

┌───────────────────────────────────────────┐
│EF00                  ORG             SUB_PUTCHAR                                     │
│EF00                  LB_PUTCHAR:                                                     │
│EF00  AF                      XOR     A       ;CY リセット                            │
│EF01  1809                    JR      LB_PUTCHAR_START                                │
│EF03  00                      NOP                                                     │
│EF04  37                      SCF             ;CY セット                              │
│EF05  1805                    JR      LB_PUTCHAR_START                                │
│EF07  00                      NOP                                                     │
│EF08  0000            V_VRAM_BASE:    DW      0       ;VRAMベースアドレス(ORG+8)      │
│EF0A  0000            CHAR_CLR_CODE:  DW      0       ;キャラクタ消去コード(ORG+10)   │
│EF0C                  LB_PUTCHAR_START:                                               │
│EF0C  DDE5                    PUSH    IX              ;IX保存                         │
│EF0E  F5                      PUSH    AF              ;フラグ保存                     │
│EF0F  F3                      DI                                                      │
│EF10  3EDD                    LD      A,0DDH          ;RAM切り替え                    │
│EF12  D3F0                    OUT     (0F0H),A                                        │
│EF14  AF                      XOR     A                                               │
│EF15  67                      LD      H,A             ;H=0                            │
│EF16  DD6E02                  LD      L,(IX+TCC_CHRNO);キャラ番号取得                 │
│EF19  29                      ADD     HL,HL   ;x2                                     │
└───────────────────────────────────────────┘

	コメント行や空白行、エラー行("*"), "cseg", "include", "end"行は除外される。

	↓下のように、同一アドレスが複数行あるときは、
┌─────────────────────────────────────┐
│EF00                  ORG             SUB_PUTCHAR                         │
│EF00                  LB_PUTCHAR:                                         │
│EF00  AF                      XOR     A       ;CY リセット                │
└─────────────────────────────────────┘

	1アドレスにつき最大256バイトまでインストラクションを連結して登録する。
┌─────────────────────────────────────┐
│                    ┏━━━━━━━━━━━━━━━━━━┓              │
│EF00                ┃ORG             SUB_PUTCHAR         ┃←ここの文字列│
│EF00                ┃LB_PUTCHAR:                         ┃              │
│EF00  AF            ┃        XOR     A       ;CY リセット┃              │
│                    ┗━━━━━━━━━━━━━━━━━━┛              │
└─────────────────────────────────────┘

	オブジェクト毎に分割コンパイルを行っている場合、それぞれのオブジェクトの
	リスティングファイルを複数読み込ませれば情報の追加登録が出来る。

	ただし、バンク切り替えなどを前提として実行アドレスが重複するようなリストを
	入れてしまうと、同じアドレスにインストラクションが多重に紐付けられてしまう
	ので、バンク切り替えするときは引数なしで "loadlist"コマンド を実行して、
	登録情報を削除してからリストを読み込ませる必要がある。

	データ定義の擬似命令(DEFB/DB/DEFW/DW/DEFS/DS)は最大7バイトのデータ(リスティ
	ングファイルに出力される最大データ数)を比較し、内容が同じであればリストの
	インストラクションをそのまま表示し、内容が異なっていたらエミュレータ側で
	解釈したオペコードのニーモニックを表示する。

	ステップ実行のときは、通常通り、エミュレータが実行中のレジスタ及びアドレス
	参照情報をリストのインストラクションの後ろに捕捉出力する。

┌────────────────────────────────────────────┐
│P6VW>s                                                                     ┃           │
│A000                ORG         0A000H                                     ┠→これ以降 │
│A000                LB_MAIN_START:                                         ┃   の情報  │
│A000#1 F3               DI                                                 ┃           │
│A001 3108FA             LD      SP,0FA08H               ;タイマー割込潰し   ;SP=EC36H   │
│A004 219BA0             LD      HL,LB_DUMMY_INTR        ;ダミーアドレス     ;HL=A000H   │
│                                                                                        │
│P6VW>s                                                                                  │
│A001 3108FA             LD      SP,0FA08H               ;タイマー割込潰し   ;SP=EC36H   │
│A004 219BA0             LD      HL,LB_DUMMY_INTR        ;ダミーアドレス     ;HL=A000H   │
│A007 E5                 PUSH    HL                      ;割込テーブルの初期化;HL=A09BH  │
└────────────────────────────────────────────┘

	・コンソールのTABを8文字スキップに変更。


■2018.03.07 ver 400
	・試験実装されていたZASMシンボルファイル読み込み機能を本枝にマージ。
	"loadsymbol [<xxx.sym>]"
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ZASMのシンボルファイルしか対応していないのでテストしただけで実装から
	外していたけど、せっかくなので有効にしてみる。

	・オートコンプリート実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コンソールに文字が入力されていたらオートコンプリートが走る。コンソールに
	文字が入力されていないときは、バイナリエディターに移行する。

■2018.02.01 ver 400
	・コンパイラを VisualStudio2017 に置き換えてみる。

	・重い。やっぱり VisualStudio2013 継続。


■2017.11.15 ver 400
	・戦士カートリッジmk2でバンク切替できなくなっていた不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Release用ソースに対するヘッダファイルのマージ抜け。
	アドレス参照用マクロが更新されてなかった。

	ロールバックしやすいように一時的にリリースソースを別管理にしたせいだけど、
	やっぱりソースの三重管理は不味いな。


	・戦士mk2用バンク切替コマンド作成。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デバッグ用、port(0x30)～port(0x37) への出力マクロ。
	
	sol2 <index> <type> <rom_set> <bank_no>
	<index>   ポートインデクス Port(0x30 + index)
	<type>    デバイスタイプ 0:ROM, 1:RAM, 2:SCC, 3:未使用
	<rom_set> ROMセット  #00～#03
	<bank_no> バンク番号 #00～#15

	例1)
	   "sol2 2 1 0 2" → "out 0x32 0x42"
	     //BANK_C(4000H-5fffH) に RAM の バンク#02(4000H-5fffH)を割り当て
	例2)
	   "sol2 0 0 1 8" → "out 0x30 0x18"
	     //BANK_A(0000H-1fffH) に ROMセット#01のバンク#08(10000H-11fffH)を割り当て


	・"write","read"コマンドのaliasに、"poke","peek"を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	こっちの方が手が馴染んでいて良い。


■2017.10.17 ver 400

	・p6tイメージを巻き戻したとき、自動ロードの挙動がおかしくなる不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	テープ巻き戻し処理の中で、テープイメージの1,2番目のデータブロックを
	ベタテープ(.p6.cas)扱いで初期化していたため、p6tイメージの先頭と2番目の
	データブロックが上書きされ、挙動がおかしくなっていた。


■2017.09.19 ver 400
	・バイナリエディタの範囲選択の挙動がおかしかったのを修正。

	・モニタモードのhelpメッセージの不具合を修正。


■2017.09.08 ver 400
	・戦士mk2カートリッジを選択しシステムメニューを終了した後、再度、システム
	メニューを起動したとき、戦士mk2カートリッジのチェックボックスがONにならない
	不具合を修正。

	・戦士mk2のメモリバンク対応に問題があったので、メモリ管理部の作り直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	実装の仕方に問題があるような気がするけど、全部見直している時間はないので
	戦士mk2のバンク切替の部分だけ作り直して対応する。


■2017.09.05 ver 400
	・マルチウィンドウモードでエミュレータ実行中にバッチファイルをドロップ
	したとき、実行コマンドが表示されずにキャレットだけ表示される不具合修正。

	・エミュレータ実行中、メニューを表示したタイミングで、モニタモードの
	ステータスを更新再描画する。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュ実行中、モニタウィンドウにリアルタイムにステータスを描画するのは
	さすがに重過ぎて無理なので、メニューを表示させたタイミングでステータスを
	更新してみる。
	これで一々コンソールに移行しなくても最低限のステータス確認ができるように
	なった。

■2017.09.04 ver 400
	・マルチウィンドウモードでデバイスロスとしたとき、サブウィンドウの描画が
	止まってしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	サブウィンドウがアタッチしているサーフェスが喪失してしまうので、Window描画
	が行われなくなってしまう。
	そのまま残しておいても仕方がないので、デバイスロストのときはサブウィンドウを
	閉じるようにする。


■2017.08.29 ver 400
	・同期描画の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	同期描画はVSYNCと同期を取っているので、VSYNCが発生しないとスクリーンが
	転送されなくなくなっていた。
	その為、描画シグナルが立たないエミュレータ外から画面更新では、サーフェス
	内容がスクリーンに転送されていなかった。(例えばPOWER-OFFアニメ等)

	・ウィンドウの更新間隔をモニタの周波数の合わせる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	30[Hz]のモニタでは、約33[ms]でスクリーン転送行う。
	というのも、30[Hz]のモニタだと、見た目上スキャンラインの奇数・偶数が
	入れ替わらないため(1回のスクリーン転送の間に、エミュレータ側では2回の
	画面描画が行われるから)、偶数奇数片方のラインが常に残像側に描画され、
	インターレス表示が分かりづらい。
	なのでモニタの周波数で画面転送を行うことにより、奇数偶数の入れ替えが
	スクリーンに反映されるようにする。

	・マルチウィンドウのサブウィンドウでもファイルのドラッグ&ドロップを
	受け付けるようにする。

	・マルチウィンドウモードでデバッグモードに入ったとき、コンソールウィンドウ
	にフォーカスを移動するように修正。


■2017.08.28 ver 400
	・モニタモードコンソールの編集操作の見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	一般的なテキスト編集やコマンドプロンプトの仕様を反映させてみた。

	範囲選択やコピペには対応出来ていない。
	ターミナルみたいに、ダブルクリックで範囲選択、右クリックでコピーとかやって
	みたいけど、今のようにグラフィック文字を直接描画している簡易的な仕組みの
	ままだと、かなり大変そう。
	そのうち、コンソール画面にTEXT-VRAMを持たせて、画面を文字で管理する仕組みに
	変えた方がよさそう。まぁ、その前にアプリをUNICODE化しないと文字編集が
	面倒過ぎてやってられない…(^^;
	

	変更点は以下の通り。
	--------------------------------------------------------------------
	[↑][↓]     コマンド履歴の移動。(複数行に跨った行でも同様)
	[Home]       編集行の先頭に移動するようにする。(入力文字列はクリアしない)
	[Ctrl]+[→]  後方の文字種区切りまでジャンプ。
	[Ctrl]+[←]  前方の文字種区切りまでジャンプ。
	[Ctrl]+[Del] 後方の文字種区切りまでの範囲を削除。
	[Ctrl]+[BS]  前方の文字種区切りまでの範囲を削除。
	--------------------------------------------------------------------
	
	文字種区切りというのは、通常文字とセパレータや記号の切り替わり位置を
	区切りとして認識することを指している。

	例えば、

	0123456789!#$%&'()@[;:],.ABCD <> あいうえお

	…という文字列があったとすると、以下のようなブロックに区切られる。
	
	|          |               |    |    |          |
	|0123456789|!#$%&'()@[;:],.|ABCD| <> |あいうえお|
	+----------+---------------+----+----+----------+
	| 文字領域 |   記号領域    | 文 | 記 |  文字    |

	左コントロールキーを押しながらカーソル移動やDELなどを行うと、上のブロック
	単位の操作になる。


	本当は[End]キーにコマンドライン最後尾移動を割り当てたかったけど、現在、
	[End]にはバイナリエディターの表示モード切替が割り当たっているので断念。


■2017.08.23 ver 400
	・VGAのP6-SCREEN描画OFFの機能が動いていなかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	誤った判定メソッド(is_enable_vga)を呼んでいた。
	is_enable_vga() とis_enable_vram() 、紛らわしいネーミングだったｗ
	VGAステータスの内容は構造体直読みに変えよう。


	・VRAM構築中の画面がスクリーンに描画されてしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	現在のエミュレータは、VRAM構築とスクリーン描画が別スレッドになっていて
	VSYNCのタイミングでVRAM構築が終わったときに描画イベントをシグナルにして
	スクリーン描画を許可している。
	ところが、実際、VSYNCのタイミングに比べてスクリーン描画が遅れることが
	多いので、VRAM構築時に立てたシグナルをスクリーン描画スレッドが受け取った
	とき既に次のVRAM構築処理に入っていたりすると、VRAM組み立て途中の画面が
	スクリーンに描画されるという現象が発生してしまう。

	画面描画の排他制御でクリティカルセクションロックが多発するのが嫌だから
	イベント駆動に変えたんだけど、そもそもオーバードライブ状態でVSYNCと
	スクリーン描画の対応が取れるわけがなかった。

	結局、VRAM構築とスクリーン描画を排他制御するように修正。


■2017.08.22 ver 400
	・システムメニュー・オプション1・OFコーナーのモード1エッヂ描画タイプの
	コントロール設定の不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コントロールの設定・取り込み処理がスッポリ抜けていたので(おぃ)、追加。

	・モニタモードのマルチウィンドウの座標と倍率を記憶するように修正。

	・"p6snap.exe"のPlatform Toolsetをv120とv100(Xp)に分離して再構築。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	やっとソースを見つけた。
	ラップ音モジュールがVista以降用とXp用で別になった。


■2017.08.21 ver 400
	・ウィンドウが最大化の状態でエミュレータが終了されたとき、最大化前の座標を
	INIファイルに保存するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Windowsが最大化されるとウィンドウ座標は(-8,-8)になってしまうようだ。


	・ステータスバー表示有効の状態でメインウィンドウのサイズを縮小したとき、
	ステータスバー領域にスクリーンの残像が残るときがあるので、これを修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	タイミング的に、サイズ変更後のステータスバー再描画の後に、描画スレッドから
	サイズ変更適用前のスクリーンが転送されてしまうと、このような現象が起こる。
	ステータスバーの再描画はスクリーン転送側から実行させる。

	・ステータスバーが有効のとき、マルチウィンドウのリサイズ処理にも
	ステータスバー高さが反映されてしまっていた不具合を修正。


■2017.08.20 ver 400
	・モニタモードのコンソール⇔バイナリエディタの行き来を、"edit"コマンドから
	旧来どおりの[TAB]キーに戻した。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	[TAB]キーは、当初の計画では、
	　・コンソール画面  : オートコレクト機能
	　・バイナリエディタ: 文字列入力機能
	となる予定だったけど、どうもその対応の実効性に疑問が持たれるようになった。
	
	そもそも、
	
	[コンソール]
	　・コマンドのは短縮命令に対応している。
	　・ファイル選択ダイアログからファイル入力を行うことが可能
	　→よって、オートコレクトの使用頻度は低そう
	
	[バイナリエディタ]
	　・かなやグラフィック文字の入力を行うのが難しい。
	　　- バイナリエディタの文字入力モードだけP6のキー配列を適応するのは大変。
	　　- P6DatRecの変換規則に則ってIME経由で全角文字を変換するという手もあるが
	　　　バイナリ文字入力専用のIMEの制御が必要になってしまう。
	　・バイナリ文字列専用のコピー＆ペースと処理が必要になってしまう。
	　・そもそも、バイナリエディタから文字列弄る？
	　→よって、苦労に見合うだけのメリットなし。
	
	…だから、がんばって実装する意味なさそうだよね(^^;
	結局、上記の理由から実装作業が長らく躊躇われていたわけだし…。
	
	因みに、[TAB]キーでバイナリエディタに以降するというアクションは、
	MS-DOSのFDやMIELに準拠したもの。


■2017.08.18 ver 400
	・"p6vwview.exe"のPlatform Toolsetをv120とv100(Xp)に分離して再構築。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	バイナリがVista以降用とXp用で別になった。
	ラップ音も再構築したいのだけど、肝心のソースが見つからないッス。


■2017.08.15 ver 400
	・VGAのスプライト枠描画オプションで、SLAVE属性のスプライト座標を絶対座標
	として描画していた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	親スプライトの座標加算が抜けてた(^^;

	・モニタモードに出入りした時、デバッグ情報の再描画がかかっていなかった
	不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	マルチウィンドウとシングルウィンドウで初期化処理が分岐された時、
	シングル側の再描画指示が抜けてしまっていた。

	・現フレーム・スキャンラインONで起動された時、画面の描画領域外フレームに
	チラつきが出てしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	現フレーム・スキャンラインONでページの奇数ページと偶数ページの走査線画像の
	初期化が行われた時、片側のページしか初期化が行われていなかったため、
	奇数・偶数のフレームに異なる画面が描画されて、フリッカー状態になっていた。
	
	VRAMの描画領域内は画面描画の度に更新されるが、描画領域の外側フレームは
	スクリーンモードやCSSが切り替わった時に書き直しになるので、初期化の
	タイミングで同期されないと、モードが切り替わるまで点滅表示になってしまう。


■2017.08.14 ver 400
	・画面回転とSTICK入力の同期を無効に出来るようにする。

■2017.08.10 ver 400
	・画面回転時のジョイスティック入力方向がおかしくなっていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	画面は半時計周りなのに、ジョイスティックは時計回りになっていた。

■2017.06.28 ver 400
	・スキャンライン描画時、Window描画がVSYNCに間に合わずにフレームスキップ
	したとき、走査線のフィールド(偶数/奇数)が入れ替わらないように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	スキャンラインの描画位置を奇数・偶数切り替える処理は画面描画の方でやって
	いたのだが、Windowへの描画が間に合わなくてフレームスキップしたとき
	現フレーム・前フレームと奇数ラン・偶数ラインの対応が崩れてしまうので、
	P6側のVSYNCのタイミングで走査線のフィールドを切り替えるようにした。

	こうしてみるとインタレス表示が出来そうに見えるけど、今現在、偶数・奇数、
	どちらのフィールドが描画中かP6側には分からないので(HSYNC検出できないから)、
	単純に水平解像度を倍にするような使い方は難しい。
	というか、「輪郭がギザギザ表示になったら手動でフィールドをフリップしてね」
	というような使い方になる。

	しかし、SR以外の機種だと、只でさえ横長ドットなところに更に垂直解像度が
	増えて超横長ドットになるだけなので、余りメリットはないかもしれないｗｗｗ
	
	SRは元々綺麗なので解像度増やす必要がないというか、そもそもVRAMが2枚取れない
	ような…


■2017.06.28 ver 400
	・非同期オプションのフラグがひっくり返っていた不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	非同期のとき同期、同期のとき非同期で動いていたりして…(^^;

	因みにここで言う「同期」というのは、エミュレータ側のVSYNCのタイミングで
	描画イベントシグナルを立てて、アップデートスレッド側にスクリーン描画して
	もらうことを意味している。

	厳密な意味での「同期」は、エミュレータスレッド側にスクリーン描画まで担当して
	もらうことだけど、これをやるとエミュレータスレッドが重くなりすぎるので、
	今はVRAM描画とスクリーン描画を分離して、スクリーン描画だけアップデート
	スレッドで行うようにしている。


■2017.06.27 ver 400
	・ブレークポイント一括クリアの短縮コマンドが効いてなかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"b c" == "break clear"

■2017.06.12 ver 400
	・N60のグラフィックモードの行途中でアトリビューが切り替わったとき、
	表示位置が行頭に戻ってしまう不具合を修正。
	(※ SC4の色滲みがOFFになっているときに発生)
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	タイニーゼビウスmkIIの画面がおかしくなっているとの報告。
	SC3/SC4色滲みドットとSC4(モノクロ)の描画ポインタはbyte描画とword描画の違い
	により別変数で管理しているのだが、行描画の途中はこのアドレスが同期して
	いなかった為、行中にSC3->SC4モノクロで属性が切り替わると、再び行頭位置から
	描画が行われてしまった。

	走査線の表示方式を弄った際のデグレデス。


	・スキャンラインが前画面描画にせっていされているとき、主線・副線の位置を
	入れ替えながら画面を描画するようにしてみる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	要するに実際のテレビと同じ見え方になる。


■2017.06.06 ver 400
	・マルチウィンドウモニタからシングルウィンドウのエミュレータ実行画面に
	戻ったとき、例外エラーが発生する不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	サブウィンドウを終了させたときに、PostQuitMessageを投げていたせいで、
	メインのメッセージスレッドが終了してしまい、DirectXデバイスがリリース
	されていた。その後、エミュレータスレッド側がデバイスの初期化をかけよう
	として失敗と…。
	
	何か、ウィンドウプロシージャのプログラムを書くと、ついつい条件反射的に
	WM_DESTROYにPostQuitMessageを加えてしまうけど、良い子はサブウィンドウから
	PostQuitMessage(WM_QUIT)を投げちゃいけないよー。


■2017.06.03 ver 400
	・リアルタイム監視モニタ機能を実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	リアルタイムモニタをONでエミュを起動するとWindowにステータスバーが付いて
	モニタモードから任意のRAMアドレスやI/Oポートを監視することが出来る。

	フォーマットはこんな感じ。

	watch byte 0xa000 #01
	       |     |     |
	       |     |     +----- 監視ID(最大16)
	       |     +----------- 監視アドレス
	       +----------------- 監視タイプ

	監視タイプは "byte"と"word"と"io"。
	"io"はI/Oポートの内容を表示する。
	IDを省略すると、空きIDに勝手に割り振る。
	"clear #01"で任意の監視IDを解除出来る。
	ID指定がないと全クリア。
	設定したパラメタはINIファイルに記憶されるので次回起動時も復元される。

	コマンドと監視タイプは短縮文字列にも対応。

	w b 0xe000   ;E000Hのバイト監視。
	w w 0xfa00   ;FA00Hのワード監視。
	w i 0xa2     ;ポートA2Hを監視。
	w c          ;パラメタ全クリア

	こんな感じ。


	・デバッグ用に0x50ポートを全解放。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	例えば、リアルタイムモニタに0x50～0x5F までのポート監視を設定して、
	プログラム中からOUT(0x50)すれば、出力値がWindowのステータスバーに
	表示されるという寸法。


■2017.05.29 ver 400
	・エミュレータ上にテキストをペーストしたときの不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードからエミュレータ実行中にテキストをペーストすると、コンソール側
	にも貼り付けたテキストが取り込まれしまい、再びコンソールに移行したときに
	自動バッチ実行が走っていた。
	エミュレータ実行中はコンソール側にクリップボードを取り込まないようにする。


	・モニタモードが一体化表示のときはキャレットのブリンクを行わないようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	少しでも排他制御を減らす努力。
	自前描画じゃなくてWindowに任せたらどうなるだろうと思って、システムキャレット
	を表示させてみたけど、DirectXのプライマリサーフェスがカーソルの上に被さって
	くるので、メインウィンドウではシステムキャレットは使えなかった。
	マルチウィンドウモードのときはシステムキャレットを使っているのでブリンクOK。


■2017.05.28 ver 400
	・画面描画方法として別スレッド描画とWindowメッセージ描画を切り替えられる
	ようにしてみる。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	やはり、画面描画処理とWindowメッセージ処理が分かれると排他ロックで足を
	引っ張られる環境もあるようなので、オプションから選べるようにしてみる。
	
	描画能力の高いPCの場合は画面を別スレッドで描いた方が効率が良い筈だけど、
	それもCPUの処理能力が高いことが前提となってくるので、結局、環境によって
	適したオプションは異なる。

	近年のマルチコアCPUだったら別スレッドで描いた方が速いだろうけど、Xp時代の
	古いCPUだと排他制御がない方が速そう。


■2017.05.25 ver 400
	・dump RAM/ dump ExRAM でポーズが効かなくなっていた不具合を修正。


■2017.05.24 ver 400
	・システムメニューでスキャンラインオプションを有効にしたとき、INIファイル
	の保存時にが例外エラーが出る不具合を修正。


■2017.05.23 ver 400
	・マルチウィンドウモードのコンソールのカーソルをシステムキャレットに変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	コンソールカーソルは基本的にバックサーフェスへの自前描画だが、ウィンドウ
	モードのときはカーソルブリンクの度に排他制御が行われることになるので、
	これが遅いPCの描画遅延の原因である可能性アリ。
	そういった理由から、カーソル描画はシステムキャレットに任せて、排他制御が
	起こらないように修正してみる。
	因みに、一体型ウィンドウのときは今までどおり自前描画。


■2017.05.20 ver 400
	・モニタモードのマルチウィンドウ表示の描画方法を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	非力なマシンでマルチウィンドウを使用すると著しい描画遅延が発生していたので、
	サブウィンドウもDirect3Dサーフェスを直接描画する。
	今までは、サーフェスの更新範囲だけを一旦バックバッファに転送して組み立て、
	そのバックバッファをウィンドウに転送していた。


■2017.05.XX ver 400
	・モニタモードの各種コマンドを拡張RAM対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張RAM用コマンドは使わなさそうだから無効にしたというより、バイナリエディタ
	や他のコマンドとの絡みが出てきてしまったために開発中断していただけのようだ。
	色々とメンバやメソッドが作りかけで準備してあった。
	作りかけた内容については、もう憶えていないので、一から見直す(^^;

	read,write,fill,move,search この辺りは、バイナリダンプの表示モードに
	連動するように修正。バイナリエディタのCtrl+VやCtrl+C、Ctrl+Fなども
	表示モードに連動させる。

	メモリマップやメインRAMは64KBだが、拡張RAM領域は128KBあるので、基本的に
	バイナリダンプのアドレス空間は 0x00000～0x1FFFF で持たせるようにして、
	メモリマップとRAMはアドレスループで表示させるようにする。
	どうせ、アドレスは16ビットしか表示されないので見た目は変わらない。
	その代わり拡張RAMの64KBを超えたアドレスはラベルの色を変えて表現する。

	・undoを拡張RAMに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	基本的にメモリを弄るのはメインRAMだけだったが、拡張RAMの編集に対応して
	しまったことにより、undoの復元もメインと拡張で区別する必要が出てきた。
	想像以上にややこしい。


■2017.05.XX ver 400
	・モニタモードのファンクション実行の不具合対応。

	・モニタモードのコールスタックの表示数を16に増やす。

	・モニタモードに拡張RAM用の読み書きコマンド実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	拡張RAMメモリ設定用のデバッグコマンドを有効化。
	普段使うことは無いだろうということでコメントアウトされていたもの。
	本当に必要最小限の機能しか実装されていないようなので(何やってたか忘れた)、
	異常系処理を追加。

	loadexram  :拡張RAMにロード。
	saveexram  :拡張RAMをセーブ。
	de         :拡張RAMのダンプ。(Dump Exram)
	           :今は拡張RAMを128KB分確保しているので、1FFFFHまでダンプ可能。
	           :但しアドレスはWORD表記なので10000H以上は"1"が切れてしまう。


■2017.04.XX ver 400
	・マージン枠をクライアント領域内に取るようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Window10だとノンクライアント領域の描画が出来ないようだ。
	フレームは1ドットしかなく、その外側は半透明の影になってしまっている。
	その為、ライアント領域内にマージンを取れるようにサーフェスサイズや描画位置
	の調整を行って、ウィンドウモードのときだけマージン幅を加えた描画を行う。

	フルスクリーン時の画面解像度とサイズに違いが出てくるので、ひょっとすると
	フルスクリーン時は描画位置がズレる可能性あり。


■2017.04.XX ver 400
	・メインウィンドウにマージン枠を設ける。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	クライアント領域の方にマージン領域を設けようとすると、ウィンドウモード・
	フルスクリーンモードを区別してバッファサイズを切り替える必要があったり、
	グラフィック表示座標をマージン分加味する必要があったりして非常に手間が
	掛かるので、ウィンドウモードのときだけノンクライアント領域…要するに
	ウィンドウのフレーのム部分を削って画面との間にブランクを空けるようにした。


■2017.04.XX ver 400
	・マルチウィンドウモニタにマージン枠を設ける。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ウィンドウのフレームとウィンドウ内の文字がくっついてしまって、情報が
	読み取りにくかったので、クライアント領域の外周に2ドット程度の隙間を空ける。


	・SR機種で漢字を使うとエミュレータがリセットされてしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	音声ROMと漢字ROMバンク切替が16KB単位になっていた。切替境界を8KBにする。


	・talkのテロップとプリンタ出力仮名文字が化ける問題を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	文末のリードバイト削除判定をバッファのお尻からやっていたため、
	トレイルバイトがリードバイトの範囲と重複する文字が出てきたとき、
	後部のトレイルバイトの部分が削られてしまっていた。
	例えば "ら" とか "ソ"とか…
	文字列の頭から全角・半角を判断しながら、チェック位置までアドレスを進めて
	行くのが正しいやりかた。判定関数を作り直すたびに忘れている(-.-;


■2017.04.XX ver 400
	・マルチウィンドウの状態でサーフェスロストしたとき、エミュレータが終了
	してしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	子ウィンドウを全て終了させると親も連動して落ちてしまうので(なんで？)、
	リカバリのときは子ウィンドウを終了させないようにした。

	・拡張漢字ROMが存在しないときに0xFCポートアクセスされるとエミュレータが
	落ちてしまう不具合修正。


■2017.03.XX ver 400
	・オプションのデフォルト値の見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	GUIに"[def: xxx]"と書かれている値と、実際のデフォルト地が異なっている箇所が
	あったので修正を行う。また、不適切と思われる初期オプションも訂正。


■2017.03.XX ver 400
	・モニタモードにバイナリ検索機能実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	16進数検索と文字列検索、両方実装。
	[Ctrl] + [F] で検索ダイアログが表示され、そこで検索データを設定する。

	入力した文字を16進数検索したければ[Search Hex]、文字列で検索したければ
	[Search String]ボタンを押す。

	一度、検索データを入れた後は、ファンクションキーで下方検索と上方検索。
	ショートカットキーは以下の通り。

	[Short cut key]
	   下方検索 (Find Next)     : [Ctrl]+[F], [F3],         [Shift]+[F2]
	   上方検索 (Find Previous) :             [Shift]+[F3], [F2]

	[F2]と[F3]キーは検索で使うようになったので、ファンクション機能が設定でき
	なくなった。ファンクションを設定しようとすると予約済エラーが出る。

	最大検索サイズは1024バイト。(16進数・文字列ともに)
	見つからなかったときは無反応。(メッセージ出されても煩いので…)

	コマンドラインから検索が行われたときは、マッピングされているメモリを
	検索する。バイナリエディタから検索が行われたときは、RAM上を検索する。

	検索開始位置は、何となく予想できるような動きをさせているつもりだけど、
	備忘録がてらにで詳しく書くと…

	コンソール画面から検索を行った場合、例えば"BASIC"の文字列を下方検索した
	とき、発見したブロックの先頭"B"の位置で検索が止まるので、次に[F3]で
	連続下方検索をかけると、"B"の次の"A"から検索が再開される。

	[Ctrl]+[F]で、一旦、FIND画面を出して検索を行った場合、検索位置がリセット
	されて、バイナリエディタに表示されている先頭のアドレスから検索が行われる。
	[ESC]キーで検索状態を解除しても、検索開始位置がバイナリエディタの先頭に
	リセットされる。

	次は逆に"BASIC"を上方検索した場合、発見したブロックの最後尾"C"の位置で
	検索が止まるので、[F2]で連続上方検索をかけると"C"の前の"I"の位置から検索が
	再開される。
	バイナリエディタ上から検索を行った場合、こちらにはカーソルがあるので、
	上方検索・下方検索ともにカーソル位置が検索開始位置となる。

	この辺、結構ややこしいので意図しない動きをする可能性は大。

	検索範囲は検索開始位置から64KB分。0xFFFF を超えたら 0x0000 に戻って継続。
	ただし、64KB境界を跨いだ位置にマッチングブロックが存在した場合、不一致
	としている。
	例) "ABC" を文字検索したとき、
	-----------------------------------------------------------------------
	FFF0: 00,00,00,00,00,00,00,00,00,00,00,00,00,00,41,42  ..............AB
	0000: 43,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00  C...............
	-----------------------------------------------------------------------
	↑のような箇所は、0xFFFF-0x0000の境界を跨いだのでHITさせない。

	エディットボックスに入力された改行コード(コピペまたは[Ctrl]+[Enter]で
	入力できる)は、文字列検索だとCR/LF(0x0d,0x0a)扱いになる。(16進数検索だと
	セパレータ扱い)
	改行コードがLFのみのテキストがコピペ入力された場合でもCR/LFに変換される。
	(たぶん)


	次は16進数データ検索について。

	16進数コードは大文字小文字関係なし。
	16進数データのセパレータはスペース、カンマ、ハイフン…あと改行。

	セパレータ無しで連続して16進数コードが入力されているときは最後尾の
	2文字だけが検索データとして取り込まれる。
	例) "012 acdef 3456 " ->  12,EF,56

	1文字だけでセパレータに区切られると、下位4bitとして処理される。
	例) "12-3-45-6" -> 12,03,45,06

	16進数コードとセパレータ以外の例外文字が現れたら16進数データ取り込みは
	そこで終了。後ろは全て切り捨て。
	例) "12 34 5s6 78 9a bc de" -> 12,34,05

	但し例外の例外として"X"の文字は無視するようになっている。
	例) "0x10,0x20,0x30" -> 10,20,30

	とはいえ、特に"0x"並びで見ているわけではないので、"xxx12,3xxxx4" とか
	入れると、12,34 になったりするｗｗｗ。手抜きです。はい。

	バイナリエディタがビットマップモードになっているときに検索を行うと、
	ビットマップ表示のまま表示アドレスだけ移動するｗ。手抜きです。はい。
	バイナリモードに戻すとマッチングブロックが表示されるので問題なし！


	------
	というわけで、作り掛けだった機能を出来る範囲で仕上げてみる。

	たかだか64KB検索なので全範囲検索でマッチングした部分を色変えしても
	良かったのだけど、バイナリ検索で余りそういう使い方はしないような
	気がするので、ワンショット検索にとどめておく。
	その代わり、マルチウィンドウのときのバイナリダンプの表示行数を２倍増量
	(当社比)。

	画面の描画とか変なところがあるけど、まぁ、気にしない。
	"Match case" も要らないでしょう。


■2017.03.XX ver 400
	・システムメニューのtiny表示機能追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	システムメニューを何とか800x600に収めるようにしてみた。
	ノーマルのシステムメニュー画面は"9"ポイントのフォントが設定されているが、
	[tiny]ボタンを押すとフォントサイズを"7"ポイントにして画面を作り直す。

	いや、色々字が潰れていてアレだけど、所謂、救済処置という奴なので
	気にしない、気にしない…(^^

	tiny画面の日本語が読みづらかったら英語環境にすると多少見やすくなる。
	その代わり英語だから読みにくくなる…（どっちやねん）。


■2017.03.XX ver 400
	・画面描画の排他制御の見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	今までは画面描画とスクリーン転送が一対一だったのでメインウィンドウに対する
	排他ロックだけでどうにかなっていたけど、マルチウィンドウだとウィンドウ毎に
	非同期転送が行われようになるので、サーフェス毎に排他ロック出来るように、
	全体的に排他制御部分の見直しを行う。

	ここが一番ややこしいところ。
	画面モード切替やアプリ終了時に例外エラーが出るのは、大概、排他制御に
	失敗している。
	ウィンドウメッセージやコンテキストメニュー、モニタコンソールなど、彼方此方
	のスレッドからパラレルにコマンドが発生するので、出来るだけシンプルにして
	おかないと、不具合原因が見つからなくなる。


■2017.03.XX ver 400
	・マルチウィンドウモニタモードのキー入力部の作り直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュレータ実行中(DirectInput経由)のキー入力は、サブウィンドウのキー入力
	コールバックから、直接、キーボードライブラリを叩くようにする。

	モニタモード時のキー入力(Window Message)は、サブウィンドウのキー入力コール
	バックをメインウィンドウにポストして処理してもらう。

	キー入力の伝達については大体問題なくなったが、これで解決かというと、
	そういうわけにもいかず…

	JoystickとかMouseとかDirectInput経由で取得しているデバイスは入力フォーカス
	を失ってしまうので、結局、メインウィンドウにフォーカスを合わせておかないと、
	ソフトによっては動作に支障が出ると思われる。

	でも、まぁ、Joystickが取れない程度なら構わんでしょ。メインウィンドウに
	フォーカス合わせておけば澄むことだし。

	それ以外に、マルチウィンドウで動かすと、Windowsメッセージ経由で画面の
	転送・更新が行われるので、多かれ少なかれ画面更新までにディレイが発生する。

	IMEなどもメインでしか処理できないので、フォーカスがサブウィンドウに当たって
	いると日本語入力できない。とはいえ、モニタモードで日本語使わないっしょ？

	デスクトップ解像度が十分な大きさなら、今まで通りシングルコンソールで
	やった方が快適かも。まぁ、マルチはマルチなりのメリットがあるので、
	お好みで使い分けって所だろうか？


■2017.02.XX ver 400
	・savememなどのバイナリ出力命令で、既存ファイルに対して前回より小さい
	サイズで出力したときに、サイズが大きいままになっている不具合対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	"wb"->"w+b"。
	コピペで流用したところも間違っていたので一括修正。


	・モニタモード画面のレイアウト調整。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	I/Oポート部分に無駄な余白があるので、レイアウトを詰めてコンパクトにした。


	・モニタモードのマルチウィンドウモード追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Windowsの最小有効解像度のガイドラインを見ると800x600とかになっていて、
	もはや、一枚画面をその解像度に収めるのは無理ということで、モニタモードの
	マルチウィンドウ化で対応してみる。

	メインウィンドウを縮小表示しても、ステータス側は等倍固定だから、見難くなる
	ということはないだろうけど、キー入力フォーカス問題とか、逆に巨大解像度だと
	ステータスが小さすぎるとか、色々課題が見えてきたので再調整が必要。


■2017.02.XX ver 400
	・起動時に自動実行させるバッチファイルを定義。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	エミュレータ起動時、"devinit.p6b" というバッチファイルが存在したら、
	それを実行してから、P6システムが立ち上がるようにする。

	ソフト開発者用機能。
	P6の起動と同時にモニタモードに突入させたい時とか、ROM用のソフト開発を
	行いたい時など、極めてニッチな用途で活躍するかもーｗｗｗ


	・バッチファイルからモニタモードに突入するコマンドを追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	バッチファイルから"mon"コマンドを実行すると、モニタモードに移行する。
	バッチの実行はその場で停止。
	コマンドラインからは実行できないのでhelpには出さない。

	・戦士mkIIカートリッジのメモリマップの見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	Excel表を見ながら再調整。C++で作っていたらカートリッジタイプごとに
	classを切り替えてうまい事やれるんだけど、今は全て同じ関数で処理しているので、
	なかなかどうして、複雑怪奇なコードになっていて頭痛が痛いYO!


■2017.01.XX ver 400
	・モニタモード移行時の画面サイズ制限を行わないようにする。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードに移行するとき、等倍サイズのモニタ画面がデスクトップに収まり
	切れないときは、エラーメッセージを出してモード移行を制限していた。
	その為、1024x768のような狭い解像度で動作させていると、ウィンドウサイズの
	表示倍率が小さく設定されていても、モニタモードに移行することが出来なく
	なってしまっていた。

	今はデスクトップ解像度やDPIの変更対策として、エミュレータの解像度が
	デスクトップに収まりきれないときは、自動的に表示倍率を調整して
	縮小表示するようになっている。


■2016.12.XX ver 400
	・メモリバンクの管理方法を全面的に修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	戦士mkIIカートリッジ対応。
	かなりの大規模改修になったので、メモリバンク周りの挙動はかなり怪しげ(^^;;

	取扱説明書に記載されている内容については実装したつもりだが、文章に明記
	されていないメモリバンク設定の組み合わせについては想像で補っているので、
	多分、間違っている。


	・システムメニューのレイアウトを全面見直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	1024x768 のデスクトップの収まるように、レイアウトを横長にしてみる。
	カテゴリのグループボックスが意外と高さを取るのでアイコンに置き換えてみる。


■2016.11.22 ver 400
	・擬似ステレオ設定時、ストリーム録音のWAVヘッダのnAvgBytesPerSecパラメタが
	間違っている不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DWORD型パラメタなのにWORDにキャストしてたりして…。
	擬似ステレオ実装時からのバグと思われる。
	今更何だよ！？って感じ(^^;

■2016.11.19 ver 400
	・モニタモードの66メモリバンク表示ダイアログの見た目を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	まだまだ未完成。デバッグに必要な機能しか実装してない。

■2016.11.12 ver 400
	・ビットマップをVGAのスプライトデータに設定するコマンド追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	256x192、8bitカラービットマップの取り込み。
	スプライトは16色だけど256色ビットマップを使用する。
	パレット並びはN66-SCREEN3の通り。
	絵のサイズや色数が合わないときはエラーになる。
	
	パレットを自分で用意するのが面倒だったら、VGAスプライト書き出しコマンドを
	実行して、そこで出力されたビットマップファイルを修正するのが一番簡単。

	パレットを最適化してしまうようなドットエディタは、最適化を切っておくこと。


	・VGAのキャラクタデータをテキストファイル(.asm)に書き出すコマンド追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	↓こんな感じで192キャラ分一括出力。
	
	;**** Character data of the VGA Adapters with Sprite Extension ****
	;Character[0] 
	DB 000H,000H,000H,088H,088H,000H,000H,000H
	DB 000H,000H,088H,0EEH,0EEH,088H,000H,000H
	DB 000H,008H,0EEH,0DDH,0DDH,0EEH,080H,000H
	DB 000H,08EH,0DDH,0CCH,0CCH,0DDH,0E8H,000H
	DB 008H,0EDH,0CCH,0BBH,0BBH,0CCH,0DEH,080H
	DB 008H,0EDH,0CBH,0AAH,0AAH,0BCH,0DEH,080H
	DB 08EH,0DCH,0BAH,0A9H,09AH,0ABH,0CDH,0E8H
	DB 08EH,0DCH,0BAH,098H,089H,0ABH,0CDH,0E8H
	DB 08EH,0DCH,0BAH,098H,089H,0ABH,0CDH,0E8H
	DB 08EH,0DCH,0BAH,0A9H,09AH,0ABH,0CDH,0E8H
	DB 008H,0EDH,0CBH,0AAH,0AAH,0BCH,0DEH,080H
	DB 008H,0EDH,0CCH,0BBH,0BBH,0CCH,0DEH,080H
	DB 000H,08EH,0DDH,0CCH,0CCH,0DDH,0E8H,000H
	DB 000H,008H,0EEH,0DDH,0DDH,0EEH,080H,000H
	DB 000H,000H,088H,0EEH,0EEH,088H,000H,000H
	DB 000H,000H,000H,088H,088H,000H,000H,000H
	
	ビットマップを描いて、エミュレータに読み込ませて試験を行って、最終的に
	テキスト出力してソースに組み込む…という開発工程を想定。


■2016.11.01 ver 400
	・VGAのキャラクタデータをビットマップに書き出すコマンド追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	256x192、8bitカラーの1枚絵として出力する。


■2016.10.29 ver 400
	・メモリバンク管理方式を作り直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	将来的に戦士mkIIカートリッジのスロット切替に対応出来るようにするため。

	電車の中でメモ帳見ながら脳内コーディング。案外これで開発が進められる。
	バグは凄い出るけどねーｗ


■2016.09.02 ver 400
	・拡張ROMを未実装のときにMEGA-ROMタイプを変更するとリセットされてしまう
	不具合に対応。


■2016.08.31 ver 400
	・待望のBOSSモード実装！
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	BOSSが来たり、同僚が来たり、猫が来たり、奥さんが来たり、子供が来たり、
	コーヒーこぼしたり、色々と都合が悪いとき(何だそれは？)、
	エミュレータを半透明化して見えにくくし、ポーズ状態に移行する。

	モニタモードで作業中は"boss"コマンドで、エミュレータ実行中は画面をダブル
	クリックすることで発動する。元に戻すにはトグル動作。

	因みに、ログコンソールが表示されている場合は、そっちも偽装が行われるけど、
	見る人が見るとあからさまに怪しいので逆効果かもｗｗｗ

	Volumeウィンドウは偽装してない。(出来ない)

	エミュレータをダブルクリックするだけで簡単に発動してしまうので、
	使いたい人だけ使えるようにオプションに有効無効スイッチを追加する。
	
	くだらない機能ほど力が入る。


■2016.08.29 ver 400
	・VGAアダプタのN60モード時のスプライト表示オフセットを修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	VGAアダプタのFPGAソースを読んで解る範囲で修正。
	まだ、あやふやな所はある。


	・mkIIとSRのグラフィックのパレットをテキストモードのカラーと分ける。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	テキストのカラーとグラフィックのカラーでスプライトマスクを区別するため。


	・メディア選択ダイアログからメディアイメージを再選択した時、前のファイル名
	の残骸が選択しなおしたファイル名の後ろにくっついてしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ディスクイメージの複数選択で文字列終端として"\0\0"までコピーするように
	したので、'\0'単体が終端として扱われなくなっていた。


	・mkIIでインテリジェント1DDドライブが選択されている時のデフォルトの
	アクセスモードの不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	mkIIにインテリジェント1DDドライブが接続されていると、ドライブ初期化時から
	片面(1D)モードで稼動するらしい。mkIIに1DDドライブを実装したときどうやって
	使うのか疑問だっけど、こういう仕様なら納得。


	・モニタモードでステップアウト実行時、Resetやモニタモード再選択などで
	実行モードが変化した際、ループを離脱するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ステップアウト実行でブレークポイント到達待ちの最中にメニューから実行モード
	が変更されると都合が悪いので、モード変更検知離脱を外していたけど、考えて
	みたらコンテキストメニューだけでなくウィンドウメニューからも変更出来て
	しまうのであった…。コンテキストメニューだけブロックしても意味が無いので、
	元の仕様に戻す。
	モードの移行で変な動きをしないように、ループアウトの後始末の部分を見直し。


■2016.08.27 ver 400
	・インテリジェント1DDドライブで片面モードが選択されているときのトラック
	アクセスの不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ノンインテリの1DDドライブで1Dディスクにアクセスするときは、(2n+1)のトラック
	アクセスが行われるので、内部で端数調整の計算(tbl=(trk/2)*2)を反映させて
	いるのだが、インテリジェント1DDの片面アクセスモードの時は、アクセスしたい
	そのものズバリのトラック番号が指定されてくるので、上記の調整が行われると
	奇数トラックにアクセス出来なくなってしまう。


	・DISKメディアの複数選択、及び複数ドラッグ＆ドロップに対応。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	DISK1とDISK2を一度にマウントできるようにする。

	DISK1のメディア選択ダイアログで2つのファイルが選択されたときは、DISK2にも
	設定を行う。(DISK2のダイアログでは1ファイルしか選択できない)

	また、DISKファイルを2つドロップしたときは、DISK1とDISK2同時マウントする。
	(ドライブ選択ダイアログは表示されない)

	但し、両方ともOSが受け付けた順番にDISK1->DISK2と格納されるので、必ずしも
	意図した順番に格納されるとは限らないので注意が必要。


■2016.08.25 ver 400
	・P6Tの自動実行に失敗する不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	キースキャンの発生タイミングが変わったため、自動キー入力が速くなりすぎて
	P6の画面遷移が追いついていなかった。


	・66SRでP6Tの自動実行が出来ない不具合修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ファンクションキーの割り込みを起こすのに、キーボード割込3を発行していた。
	ファンクションキーの受け取りはキーボード割込2。


	・P6TのCLOAD待機状態のときリセットされてしまうと、その後、キー入力を
	受け付けなくなってしまう不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	待機フラグの落とし忘れ。


	・ステータスセーブにVGAアダプタ情報を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	えいやっ！と追加してみた。(mkIIと66のみ)


	・どこでもロード時とVGAリセット時にモニタモードのVGA領域が再描画されない
	不具合修正。

	・VGAリセット時、スクロールオフセットが初期化されない不具合修正。

	・解像度を切り替えるとスキャンラインがOFFにされる不具合修正。


■2016.08.24 ver 400
	・モニタモードのクリップボード処理とバッチ処理のバッファを256KBに拡張。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	バッチファイルの中にVGAアダプタ用のキャラクタ定義命令を192個並べ、
	さらにスプライト定義コマンドを数百個並べても全て一括で処理できるよう、
	バッファサイズを大幅拡大。
	因みに、今まではパラメタの長いコマンドが無かったので4KBしか取って
	いなかった。


	・モニタモードのバッチ処理で一行内の区切り記号(";",":")が処理されて
	いなかった不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	クリップボードでコマンドを貼り付けたときにはC言語の様に、
	"reg de 0xa200;reg hl 0xe200;reg bc 0x200;"
	のような連続コマンド処理を受け付けているが、バッチ処理の方では先頭1コマンド
	しか処理されていなかった。


	・スプライトの最大並列表示に対応。

	・モニタモード上でコンテキストメニューの[貼り付け]を行うと、クリップボード
	の内容がエミュレータ内の入力バッファに送られていた不具合修正。

	・実は秘密だが、モニタモードのコマンドラインは改行前に"\"があると行を継続
	扱いしてくれる。(秘密なのでWEBの使い方には書かない)
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	例)
	vga 0x30 10 \
	00000000.11111111\
	00FFFF00.1111F111\
	0F000FF0.11FFF111\
	0F00F0F0.1111F111\
	0F0F00F0.1111F111\
	0FF000F0.1111F111\
	00FFFF00.11FFFF11\
	00000000.11111111\
	\
	22222222.33333333\
	22FFFF22.33FFFF33\
	2F2222F2.3F3333F3\
	222222F2.3333FF33\
	2222FF22.333333F3\
	222F2222.3F3333F3\
	2FFFFFF2.33FFFF33\
	22222222.33333333\

	例えば、上のような文字列をモニタコンソールにペーストしたり、P6バッチに
	記述したりすると、1行コマンドとして処理してくれる。

	但し、内部的には'\'と'\n'をDEL(0x7f)に置き換えてスキップ扱いしている
	だけなので、ファイル名などを行を跨いで記述しようとしても正常に処理できない。

	実質、パラメタ中の無効文字を無視してくれるVGAキャラクタ設定コマンド専用の
	記述テクニック。("."文字もスキップされている)


■2016.08.23 ver 400
	・VGAアダプタが未実装のときモニタモードからVGAコマンドを投げると、
	コンソールに制御が戻ってこなくなる不具合を修正。


	・320x200解像度と256x192の解像度のオフセット位置の調整。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	256x192の解像度は、初代機でスクリーンの周辺に走査線最後尾のキャラクタを
	描画するために、サーフェス解像度が320x208になっている。

	320x200のときは文字通り320x200のサーフェスを確保していたが、VGAアダプタの
	解像度とVRAM解像度で別々のサイズを指定できるようになったため、サーフェス
	サイズも両解像度共通で320x208とるようにする。

	また、320x208のサイズだと音声合成テロップ領域の上に重なってしまうため、
	エミュレータのウィンドウサイズを640x496に拡大。(今までは640x480)


■2016.08.22 ver 400
	・コンテキストメニューにVGA系のコマンド実装。

	・WindowメニューにVGA系のコマンド実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ON/OFF/RESET

	・システムメニューにVGA系のオプション実装。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	不要項目もあるのでレイアウト見直しも必須。

	・システムメニューのON/OFFラジオボタンをONのチェックボックスだけに変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	少しでも場所を空けたいので…。


■2016.08.21 ver 400
	・モニタモードからの復帰で落ちるバグ修正。

	・モニタモードのVGAコマンドでスプライトを更新したとき、更新したスプライト
	以外のデータが壊れるバグを修正。

	・描画デバイスロストの復元前に警告ダイアログを表示させるように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	省電力モードへの切り替えなどでデバイスが喪失したときなど、ユーザーが
	戻ってきてから復元を試みるように、警告ダイアログを出したて停止させる。


■2016.08.20 ver 400
	・解像度切替で落ちるバグの修正。

	・色滲みモードでスプライトと重ね合わせ表示されると都合が悪いことに
	なるので、VGAが有効のときは色滲みモードは無効。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	まぁ、仕方が無いでしょう(笑。


■2016.08.19 ver 400
	・モニタモードの"vga"コマンドに、スプライトとキャラクタの設定ダイアログを
	追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	実装試験のためにデータを目視出来るエディットボックスが欲しかったので、
	使い勝手や実用性は二の次で…(^^;

	スプライト設定ダイアログは、スプライト番号コマンドのパラメタなしで起動。
	例)  vga 0x10

	キャラクタ設定ダイアログは、キャラクタデータコマンドのパラメタなし、
	またはデータなしのときに起動する。
	例)  vga 0x30       // このとき表示されるキャラクタ番号は
	                    //  最後に設定されたキャラクタ番号となる。

	     vga 0x30 128   // 指定したキャラクタ番号のデータが編集できる。

	また、バッチファイルからもキャラクタの定義が出来るようにしたかったので、
	1コマンドラインの文字数を512byeまで拡張。
	画像データは16x16=256バイトの16進数文字で定義する。
	データ設定は↓こんな感じ。

	例)  vga 0x30 10 "0011223445566～ABCDEF3210" 
	                // データのダブルコーテーション括りは無くてもOK。
	                // "0"-"9","A"-"F" 以外の文字が挟まっていたらスキップ。
	                // 256バイトに満たないサイズでデータが終了していたら、
	                // 残りの領域は"0"になる。


■2016.08.18 ver 400
	・モニタモードのコンソール出力中のポーズキーと中断キーの処理を変更。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	[ポーズキー] Ctrl+S, Space, Enter
	[中断キー]   Ctrl+C, ESC, End

	・VGAの枠外描画のバグ修正。

	・スキャンラインで落ちるバグの修正。

	・スキャンラインに前フレームを描画するように修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	本来のスキャンラインに近い描き方ではあるのだが、如何せん動きのある画面だと
	見た目が汚くなるので、今まで実装しようとは思わなかった。
	今回、画面描画を作り直したついでにやってはみたけど…
	ん～、どうなのかな？P6は解像度が荒い分、輪郭のギザギザがかなり気になる。
	オプションにしとく？


■2016.08.16 ver 400
	・モニタモードに"vga"コマンド追加。

	・モニタモードにVGAステータス表示領域を追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	モニタモードの解像度を800x820に拡大。(元は800x600)
	キャラクターデータは並べて表示。スプライト情報はカレントスプライトだけを
	表示する。スプライト一覧表示はコマンド側で対応させる。


■2016.08.15 ver 400
	・VGAアダプタの描画処理を実装。

	・mkIISRのメモリバンク選択の不具合を修正。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	えすびさん調査によるとSRのメモリバンクで16KBアラインになるのはCGROMと
	内蔵RAMだけとのこと。どうやら回路のバグらしい。
	他のメモリバンクは8KBアライン。


■2016.08.11 ver 400
	・VGAアダプタのコマンド受付処理を実装。

	・ファンクションガイドにVGAアダプタのReadyインジケータ追加。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	デバッグでは必須だけど、開発者以外は見ないよなぁ…。
	スプライト対応ソフトの実行中にチラチラ点滅していたら煩わしいかな？


■2016.08.08 ver 400
	・VRAM描画処理の作り直し。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	仕様の設計から始めて、大体、実装まで2ヶ月かかってる。
	まぁ、週に数時間しか作業できない割りには早く出来た方かも知れない。

	今年のP6_OFF会で拡張VGAアダプタのデモを見なければ、おそらくもっとダラダラ
	やって何年も掛かっていたと予想。 モチベーションは大事だｗ。

	ver400系の本来の計画だと、先ずソースのC++化・MFC化を行った後、以前、WEB
	ページのマイルストーンにも書いていたように、個人的に欲しい機能を実装して
	行く予定だったけど(主にメガドラ方向に…)、夢の機能と思われたスプライトを、
	西田さんがVGAアダプタという予想だにしなかったデバイスで対応するという
	奇跡的な流れが起きたので、一気に対応プライオリティがひっくり返った。

	尤も、New戦士ROMは、既存仕様との絡みから対応に時間がかかりそうなので
	(主にモニタモード側の問題だけど)、とりあえずの先送り。


■2016.07.25 ver 400
	・v310eからブランチング。
	- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	プロジェクトファイルや各種バージョン絡みのファイル名などの対応。


---------------------------------------------------------------------------
