PS/55ディスプレイ・アダプターの画面モードと解像度
PS/55のグラフィックについて。レジスタの内容などハードの内部的な仕様はDOSVAXのソースを参照してください。
ハードウェア
PS/55の日本語表示機能はディスプレイ・アダプターと呼ばれるMicroChannelカードによって提供されます。このカードはPS/55のシステム装置に内蔵され、各モデル固有のものです。モデル間の互換性はPS/55用のDOS(以下、DOS)を通してのみ保証されており、ハードウェアとしてどれほど互換性があるのか分かりません。VGAなどのIBM PC系のビデオカードとは異なり、ディスプレイ・アダプターはBIOS ROMを持たず、機能はDOSなどのOSによって提供されます。このため、モデルによっては専用のDOSが用意されていました。
普及型となったのは、1988年発売のデスクトップ型モデル5550-S/Tです。後発の多くのモデルはこれに基づいており、同じDOS(ディスプレイドライバー)が使えることから、それらのモデルの間ではハードウェアにある程度互換性があると考えられます。この記事ではこの普及モデルのディスプレイ・アダプターIIについて言及しています。他モデルのディスプレイ・アダプターについては下記参照。
→ IBM PS/55 ディスプレイ・アダプターⅡについて - Diary on wind
ディスプレイ・アダプターIIは1MBのビデオRAMと256KBの利用者定義文字用RAMを搭載しています。フォントROMのサイズはダンプしたことがないので分かりませんが、少なくとも600KBはあると考えています。内部的にはVGAの上位互換といって差し支えないほどVGAに似ていますが、I/Oポートやメモリアドレスといった根本的な要素が違います。
フォントサイズと画面解像度
テキスト表示の解像度は1040×725ピクセル。見慣れない数字です。この数字はテキスト表示でのボックスサイズ(フォントに余白などを含めた大きさ)から導出できます。
DBCS:
1 2 ... 13 1 2 ... 12 13
1 | H.Grid | H.Grid |
-|--------------------------|-
2 | Space | Space |
-|--------------------------|-
3 V| | |S
.| | |p
G| Font Pattern |a
r| (24x24 pixels) |c
i| | |e
d| | |
26 |_____________|____________|
27 | Space | Space
------------------------------
28 | Underscore | Underscore \
------------------------------ Cursor Position
29 | | /
フォントROMには全角フォントは24×24で収録されていますが、罫線や余白用の領域を含めると26×29になります。半角フォントはこれの半分になります。このことはモデル5550-S/T/V技術解説書に記載されています。従って、これに40字×25行を掛ければ1040×725となります。
PS/55の仕様表では「テキスト表示 漢字:40文字×25行、英数カナ:80文字×25行」と書かれることが多く、この数字はあまり公になっていません。古いWebサイトや本などの色んな文献ではグラフィック表示の解像度である1024×768しか記載されていないため、私も半信半疑でした。最近になってIBM DOS/V Extensionsのビデオ拡張プロファイルにこの数字を見つけ、ようやく確信しました。
画面モード
DOSでは以下の画面モードがサポートされています。ただし、モード0FhはDOS K3.4以降、モード03hはDOS J4.0以降でサポートされています。モード45hはビデオBIOSからCRTCの初期化のみができます(MODEコマンドでの切り替えやDOS画面の表示は不可)。
モード | 種類 | 表示文字数 | ボックスサイズ | アドレス | 面数 | 画面解像度 |
---|---|---|---|---|---|---|
08h | 単色文字 | 80×25 | 13×29 | E0000h | 1 | 1040×725 |
0Eh | カラー文字 | 80×25 | 13×29 | E0000h | 1 | 1040×725 |
03h | VGAモード3互換? | 80×25 | 13×29 | B8000h | 1 | 1040×725 |
0Ah | 単色グラフィック | 78×25 | 13×29 | A0000h | 1 | 1024×768 |
0Dh | 16色グラフィック | 78×25 | 13×29 | A0000h | 4 | 1024×768 |
0Fh | 256色グラフィック | 78×25 | 13×29 | A0000h | 8 | 1024×768 |
45h | 16色グラフィック | 80×25 | 13×29 | A0000h | 4 | 1040×725 |
IBM PC系と異なり、ディスプレイ・アダプターの内部レジスターはほとんどが文書化されていません。基本的にはDOS上からBIOS割り込み(Int 10h)を使ってモードを指定して切り替えることになります。
モード 08h (単色文字モード)
DOS起動時のデフォルトの画面モードです。単色といっても高輝度属性を指定すると別の色になるので、実質2色です。デフォルトの色は通常色が緑、高輝度色が白ですが、MODEコマンド(内部的には属性コントローラーのレジスター)によって64色のパレットから選択できるので、正しくは「64色中2色」となります。さらにDACのパレットレジスターを操作すれば262,144色から選べるので「262,144色中2色」となります。背景色は黒固定ですが、DACのパレットを操作すれば別の色に変更できます。
IBM PC系と異なる点として、文字モードの属性に縦罫線と横罫線の指定があります。日本人は表に罫線を引くのが大好きなので、Multiplanも1-2-3も日本語版独自で罫線機能が追加されています。PC-98はテキスト画面にグラフィック画面を重ねることができるので、罫線はグラフィックで描いていました。PS/55ではグラフィックを重ねることはできませんが、属性バイトによって同様のことが実現できました。
ディスプレイ・アダプターで使う2バイト文字コードはJISコードを切り詰めた特殊な体系になっていて、ビデオメモリーでは属性バイトでの指定と組み合わせて2バイト文字を表現しています。DOSではシフトJISコードと相互変換するためのファンクションが用意されていたようで、ビデオメモリーに直接アクセスするアプリケーションはこれを利用するか自前で変換プログラムを組んでいました。
モード 0Eh (カラー文字モード)
下線、点滅、非表示の属性の代わりに3ビット・8色から文字色を指定できるモードです。単色文字モードも述べたとおり、属性コントローラーやDACのレジスターを操作すれば様々な色に変更できます。罫線やカーソルはそれぞれ独立した色指定を持っています。反転属性を使うと見かけ上はカラフルに見えますが、文字色は背景色に置き換えられるだけなので、色の組み合わせは後述のモード3に劣ります。
モード 03h (VGAモード3互換?)
カラー文字モードでは背景色は1色固定で、属性バイトの構成はIBM PC系とは異なります。これではIBM PC用アプリケーションの移植に困ると考えたのか、メモリーアドレスや属性バイトの構成をIBM PC系のCGA英数字モードと互換性を持たせたのが、このモードです。文字色と背景色をそれぞれ16色選択できます。B0000hに同じサイズのビデオメモリーが配置され、2バイト文字の判別はそこで指定できます。
DOS/Vの日本語モードも画面モード03hを使用しますが、ビデオメモリーへの書き込み方法が違うため、DOS/Vのアプリケーションをそのまま動かせるわけではありません。IBM PC用英語アプリケーションは、英数字モードで動くものに関しては動作します。しかし、2バイト文字を扱えないのと罫線が文字化けします。
正式名称はDOSの技術解説書を読めば分かるかもしれませんが、私は持っていません。
モード 0Ah (単色グラフィックモード)
PS/55のDOSはグラフィックモードでのテキスト出力もサポートしています。このモードでは解像度が1024×768となり僅かに幅が足りないので、テキストは78字×25行になります。ビデオメモリーはA0000h-BFFFFhに128KB配置されます。その中でも30KBほど余りますが、その一部はマウスカーソルの表示パターンの保管に使われます。
モード 0Dh (16色グラフィックモード)
ビデオメモリーはA0000h-BFFFFhに4プレーンが重なって配置され、レジスターの操作でアクセスするプレーンを選択します。これはIBM PC系のEGAやPC-98のEGCと同じで、プレーン同時アクセスによってグラフィックデータを書き込みます。同じアドレス・ビット位置にある各プレーンのビットからパレットのインデックス(4ビット値)が構成され、パレットに設定された色が表示されます。各パレットは12ビットのRGB値なので「262,144色中16色表示」となります。
技術変更 (Engineering Change) の情報によると、ディスプレイ・アダプターにはビットブロック転送 (Bitblt) 機能があるようですが、詳細は不明です。
モード 0Fh (256色グラフィックモード)
単に4プレーンが8プレーンになっただけで、ビデオメモリーの構成は同じです。
利用者定義文字用RAM
利用者定義文字のフォントパターン(26×29)が置かれます。DOSに含まれるUSRFNTユーティリティーを使ってフォントを作成・登録することができます。DOSでユーザーが使用できる領域はシフトJISコードのF040-F3FCh、外字コードの95区から102区までの752字ですが、これだけだとRAMの半分も使っていません。残りがどう使われているのか不明です。1バイト文字はここにロードされるようなので、半角フォントを変えたり別の字に置き換えたりすることも可能です。DOS文書プログラムはこの仕組みを使って倍角文字や色んな線種の罫線など特殊フォントを表示していました。
DOS J4.0では103区から114区まで1128字が「非常駐文字」として使用できることが後で判明。外字用RAMの空き領域はこの文字を表示するときに入れておく場所のようです。