240717 PS/55エミュ製作 [38]グラフィックモードとBitBlt
あれからグラフィックモードの開発に四苦八苦しながらも、何とかWindows 3.0の16色や256色モードが読めるレベルにはなってきた。
最初はDOSのコマンドラインのグラフィックモードすらまともに表示できない状態だった。この原因を探すのに丸2日かかった。
アドレスラッチの処理を直して文字は表示できるようになったけど、色がおかしい。ビデオメモリーの各プレーンを属性コントローラーのパレット番号へ変換するプログラムにバグがあった。
BASICのグラフィックモードでPAINT命令の塗りつぶしをすると枠外にはみ出る。グラフィックコントローラーにコンペアリード(技術解説書には書かれていない)を実装していないことが問題だった。
Windows 3.0を16色モードで起動すると色がグレースケールみたいになる。
DACのパレットにデフォルト色をセットしていないことが問題だった。J-DOSならDOS起動時にパレットを初期化するんだけど、DOS/VのWindows 3.0ディスプレイドライバーはしないらしい。ハードウェア・リセット時にPOSTで初期化されるはずなんだろうか。
グラフィックコントローラーにXOR演算の書き込みを実装したら文字も表示できるようになった。しかし、アイコンの色とメニューを開いて閉じた場所の色が変。
ビデオメモリーに書かれたデータをレジスターの内容とともにログファイルへ書き出して可視化した。エミュレーションのコードより解析用のデバッグコードをいじる時間の方が長い気がしてきた。