PC-8801mkIIMRで64色同時表示してみる

 SR以降のPC-8801は、640×200ピクセル・512色中8色表示のグラフィックス機能を持っています。同時発色数が8色ですので、基本のデジタル8色以外はなかなか選びづらいこともあり、せっかく512色表示可能なDACが活躍する機会がなかなかありません。
 1ピクセルはRGB各1ビットで表されます。ここで横2ピクセルをまとめてRGB各2ビットとみなすと、横方向の解像度が半分になる代わりに色深度が2倍、つまり320×200ピクセル・64色同時表示が実現できます。

 PC-8001mkIIの640×200モノクロ⇔320×200・4色表示の切り替え機能と同じようなことをやるわけです。

改造してみる

 PC-8801mkIISRの回路図を横目で見つつ、手を出せるかどうか検討してみます。MRはSRよりもさらに高集積化が進んでおり、グラフィック周りの回路はほとんどカスタムチップに入ってしまっているようなので、DACの入り口である7406×2個の部分に回路を割り込ませることにします。DACに来るRGBデータをドットクロックに合わせて取り込み、640×200モードならそのまま何もせず出力、320×200モードなら2ピクセル分をまとめて6ビットにして出力します。
 MRのマザーボードではIC16, IC20の7406がDACの入力側です。7406に来る信号は左図のようになっていました。これら2つの7406を取り外し、ソケット化します。IC16の上にある3つのトランジスタのあたりがドットクロックの分配部で、ドットクロックはここから取るのですが、分配されているクロックのどれを使うべきかわからなかったのでテキトーに一番下(R60の片側)を使いました。とりあえず動いているのでよしとしています。

 追加する回路はXC9536+取り外した7406×2個で構成します。IC16, IC20のあたりは上に電源ユニットが来るので、あまり高さに余裕がありません。
 XC9536の中身はこちら。2ピクセルをまとめて6ビットとして出力するためには、2ピクセルごとの境目を正しく判定する必要があります。そこで、パレットにすべて中間色を割り当て、デジタル8色→中間色の切り替わりを検出して、境目を判定することにします。具体的には、パレットの緑成分をすべてG2=0, G0=1にセットし、R1, G1, B1をRGB成分として使っています。G2=0, G0=1ならグラフィクス、それ以外ならボーダーカラーまたはテキストとなります。テキスト画面の表示内容が横2ピクセルで一致していないと同期がずれて表示がおかしくなるので、テキストは横40文字モードまたはセミグラフィクスモードにしておきます。

 640×200/320×200モード切り替えのためのI/Oポートを拡張スロット上にテキトーに用意し、追加回路と接続します。別にスイッチでもいいんですが、単に気分的な問題です。

ソフトウェア

 ソフトウェア側から見ると、320×200・64色モードではVRAM各プレーンの各バイトが4諧調×4ピクセル(2ビット×4)になったように見えます。その他の使い方は全く同じです。(88のグラフィック機能を変更したわけではなく、出力の解釈(?)を変えているだけですので当然ですが…。)

サンプル画像

 デジカメがしょぼいのでいまいち綺麗に撮れていませんが、実物はちゃんと色が出ています。
         

参考文献


戻る