240105 PS/55エミュ製作 [24]Win3ディスプレイドライバー
結局、あれから懲りずに今度はWin 3.0に対応させようとしています。ドライバーのハードウェアチェックが通らない問題は、MCA機特有のNVRAMにアクセスするI/Oポートを実装してディスプレイ・アダプターのPOS IDを返すようにしたら、起動できるようにはなりました。このI/Oポートは技術解説書などのドキュメントには説明がなく、下のページが唯一の手がかりでした。
→ Home > Tech > MCA > Checking for Micro Channel Bus - Ardent Tool of Capitalism
しかし、画面解像度の設定が何か変なのと、グラフィックは文字しか映っていない。
これもハードウェア技術解説書には一切触れられてないディスプレイ・アダプターのBitBLT機能が使われているようです。手がかりは下のようなログとDOS J4.0, J5.0に付属する$BITBLT.SYSというファイルのみ。メモリーに書き込まれている89や95は何かのコマンドだとは思うんだけど、この謎をどうやって解けばいいものやら。
PS55_GC: Write to port 3e0, val 1f08h (7944), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 00h (0) -> 1fh (31)
PS55_MemHnd: Setup page handlers
PS55_GC: Write to port 3e0, val 0008h (8), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 1fh (31) -> 00h (0)
PS55_MemHnd: Page handler is restoring.
BitBlt memory:
89 3e 55 00 89 36 80 00
89 2f 80 00 95 0a ff ff
95 0c 00 00 89 33 03 00
89 35 20 00 89 21 7a 00
89 22 7a 00 91 29 3f c3
00 00 91 2a fe 85 01 00
95 08 00 ff 95 09 ff 00
95 01 00 00 95 03 80 00
88 0d 01 00 89 3d 00 00
95 05 48 10 95 0b 09 02
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
PS55_GC: Write to port 3e0, val 1f08h (7944), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 00h (0) -> 1fh (31)
PS55_MemHnd: Setup page handlers
PS55_GC: Write to port 3e0, val 0008h (8), len 2
PS55_3E1(??): Write to port 3e1, idx 8, val 1fh (31) -> 00h (0)
PS55_MemHnd: Page handler is restoring.
BitBlt memory:
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
99 30 3a 22 02 13 bb 13
89 20 01 00 00 00 00 00
PS55_GC: Write to port 3e0, val 03h (3), len 1
PS55: Read from port 3e1, idx 3, len 1, ret 80