マルチステーションの謎と真実(改訂版)

によれば、5541-M/PのビデオRAMの容量は、

モノクロ 256KB カラー 768KB

と書かれている。これは確かにグラフィックの表示に必要な容量と釣り合わないと、今まではそう思っていたが、先日のPS/55初代ディスプレイ・アダプターの考察を踏まえると一つの仮説が浮上する。

「5550はソフトウェアフォントを使用する」と知られているが、具体的にどういう仕組みで表示しているのか聞いたことがない。仮に一字一字を表示する度にディスクアクセスが発生していたら、とんでもなく遅くなることだろう。故に、使用頻度が高いフォントはメインRAMなどの半導体メモリにキャッシュとして移していると考えるのが当然だろう。

この辺りは日本語DOSのソフトウェア開発者向けマニュアルである『日本語DOSの内部構造とプログラム・インターフェース』くらいには書いてありそうだが、残念ながら私はこの文献を持っていない。ただ、ユーザーズマニュアルからある程度推理できることがある。

日本語DOS K3.3のユーザーズ・ガイド参照編(第3版、1989年5月)には、フォントについて次のように書かれている。

日本語DOSは、システム始動時に全角フォント・ファイルを一部分だけ記憶域に読み取ります。読み取った部分のうち、

  • 常駐部分は日本語DOSを終了するまで記憶域に保持されます。
  • オーバーレー部分は他の文字パターンによって重ね書き(前の文字が記憶域中から消え、後の文字が入ること)されるまで記憶域に保持されます。

記憶域に保持されている文字パターンは、直ちに表示または印刷でき、ディスクから読み取る必要はありません。

記憶域に保持されていない文字パターンを必要としたときは、日本語DOSはディスクから読み取って、オーバーレー部分に追加します。記憶域中に保持できる文字数は限られているため、この数以上必要になるとオーバーレー部分の古い文字が重ね書きされます。

記憶域中に保持できる文字数は次の通りです。

文字モード グラフィック・モード
フォント16 1536 1376
フォント24 1536 1393

このうち400文字が常駐できます。

システム始動時に、フォントのどの部分を読み取るかは、フォント・マップによって決まります。PS/55システムは、フォント・マップもディスク・ファイル($SYS1MAP.FNT)として保持しています。

文面を読むに、この記憶域とやらは容量は可変ではないように読める。全角フォント(24×24)が1536字とは結構な量だ。最小でも 72 bytes x 1536 characters = 108 Kbytes 必要になる。最大640KBしかないメインRAMにそれだけの容量を消費するのはもったいない。となると、これはビデオRAMに入れているのではないだろうか。

先の参考サイトには、24ドットモノクローム・モデルの最低必要なビデオRAMは96KBとあるが、PS/55(MCA機)の技術解説書によれば、単色グラフィックモードはアドレスA0000h-BFFFFhに128KBのAll Points Addressable (APA)バッファーが配置されると書かれている。実際に画面上に表示されるのは96KB分で、32KB分は表示に使われないともはっきり書いてある。

また、DOS K3.3の動作を解析するに、半角フォント(13×29)256字分がRAMにコピーされることも分かっている。属性バッファー(いわゆるテキストRAM)はビデオRAMとは別に持っている可能性もあるが、今回は含めておく。

従って、

  • 単色グラフィックのAPAバッファー:128 Kbytes
  • 全角フォント:72 bytes x 1536 characters = 108 Kbytes
  • 半角フォント:64 bytes x 256 characters = 16 Kbytes
  • 属性バッファー:2 bytes x 80 columns x 25 lines = 4000 bytes

とすれば、大体256KBになる。しかし、ここで疑問が生じる。ユーザーズ・ガイドの記述では、グラフィック・モードは文字モードよりも記憶中に保持できる文字数が減るようだが、この計算方法の想定なら、文字モードとグラフィックモードでビデオRAMのデータは併存できることになり、文字数を減らす必要がない。

また、カラーモデルはビデオRAMが768KBとあるが、128KBの4プレーンだとすれば512KB。ここにフォントと属性バッファーを加えても640KBとなり、128KB余る。カラーグラフィックモード中も単色グラフィックモードのAPAバッファー(画面内容)を保存できると考えれば都合は良いが、当時高価だったRAMの使い道としてはもったいない使い方のように感じる。

もう一つ問題があって、先ほどは全角フォントの大きさを24×24としたが、ユーザー定義の全角文字サイズは26×30であり、画面表示では24×24で切り取られるが、プリンター出力ではこちらのサイズが使われる。また、PS/55ディスプレイ・アダプターIIの外字RAMにはこのサイズが1文字 128 bytes で保持されることが分かっている。

そうなると、

  • 全角フォント:128 bytes x 1536 characters = 192 Kbytes

モノクロームモデルではこの時点でビデオRAMは残り64KBしかなく、単色グラフィックモードのAPAバッファーを割り当てるには不足している。

BASICのメモリーマップ図を見る限り、フォントとAPAバッファーが共用である(→ビデオRAMに保持される)ことは明らかなのだが、容量の計算ではイマイチ上手く説明できない。

真相に一歩近づいたようで、しかしモヤッとした終わり方だな。


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!