Λ-1/Lambda-2022 の拡張(7)K68-VDG の接続

Λ-1 システムの目玉機能のひとつは MC6847 VDG を使用したディスプレイインターフェイスです。なにしろカラーモニタディスプレイは当時の市販マイコン(今で言うパソコン)のアイデンティティで、標準的な自作ボードマイコンとは一線を画する機能でした。これさえあればビデオゲームが作れる!まあそう簡単に行くものではなかったのですが、表現力という点でカラーディスプレイは飛躍的な差が付くデバイスでした。

そんな MC6847 VDG ですが Λ-1 でサポートされるのは 32×16 テキストモードだけです。このモードでは VRAM は 512 バイトしか必要としませんし、同じメモリ量で使えるセミグラフィックモードでは 64×32 のまがりなりにもカラーグラフィックスが出力できたのです。グラフィックスといってもテキストモードに間借りして 2×2 ボックスパターンキャラクタを表示させるものですが、8 色カラー出力が可能でした。

当時はメモリのコスト面を考慮するとこのような低解像度の画面設定がベストだったわけですが、現在では大容量 SRAM がたやすく手に入ります。MC6847 がサポートする 8KB VRAM を最大限に使いたいところです。

ここまで考えると Kuni-Net 様設計の K68-VDG が選択肢に入ってきます。K68-VDG は今回作っている Λ-1 マシン(Lambda-2022)で採用した SBC-Bus に対応していますし、MC6847 の各種モードをサポートして VRAM は 8KB x 4 プレーンが利用できます。またビデオ出力が高画質であることも K68-VDG の利点です。

K68-VDG を Λ-1(Lambda-2022)で使うには VRAM アドレスと VDG 設定レジスタ(LS573 8 ビットラッチ)のアドレスを K68-VDG のオリジナル設計から変更する必要があります。

デバイス旧アドレス新アドレス
VRAM$A000-$BFFF$C000-$DFFF
VDG CTL$81xx$F048

このアドレスに沿って動作するためには K68-VDG のデコード回路に手を入れる必要があります。次のように設定します(元回路は K68-VDG リポジトリのこちらを参照)。

  • VRAM アドレス変更:SBC Bus ピン 35 に $C000-$DFFF デコード信号(VRAM#)が出るようにする(I/O 基板で実装済み)
  • VDG CTL アドレス変更:SBC Bus ピン 37 に VRAMCTL# が出るようにする(I/O 基板で実装済み)。また、K68-VDG の LS02(U5)のピン5, 6 と A8 の間の配線をカットし、代わりに A3 を U5 ピン 5, 6 に接続する
  • K68-VDG のアドレスデコーダ(U10、LS138)は実装しない

K68-VDG 基板上の実作業としては U3 のピン 5, 6 部分のみパターンカットとジャンパが必要になります(トレースの都合上 U9 へ A8 を再配線する必要があります)。それから、現在 NC となっている MC6847 の FS#(ピン 37)を I/O 基板上の PIA0 PA7に接続します。これはバスを介さずに行います。

このように若干手を入れる必要がありますが、MC6847 の VRAM をフル実装した K68-VDG の機能が簡単に利用できるのは大きな利点です。これも SBC-Bus を基盤として SBC ユーザの皆様の設計が標準化されているおかげです。

Chick-Bug の再改造

これでハードウェア的には K68-VDG を Lambda-2022 に接続できましたが、Chick-Bug モニタプログラムは現状ではシリアルコンソール専用に改造されています。これを VDG/シリアル両対応に再改造します。方針としては次のようになります。

  1. 以前シリアル用に書き換えたルーチン(disp1c, kbread, etc.)を一旦オリジナルコードに戻す。
  2. シリアル対応版ルーチンを別名(disp1csr、ineee)に変えて移動する。
  3. Chick-Bug ワークエリアに入出力ルーチンスイッチ変数 eeesw を設ける。bit7 … シリアル出力オンオフ、bit6 … VDG 出力オンオフ、bit0 … シリアル入力 (1) / パラレルキーボード入力(0) 切り替え、という設定にする。デフォルトは 0xc1
  4. disp1c ルーチンで eeesw bit7, bit6 をみて、それに応じて出力ルーチンの呼び出しをオンオフする
  5. kbread ルーチンで eeesw bit0 をみて、それに応じて入力ルーチンを切り替える

下の画像に示すように、シリアルコンソールと並行して VDG テキスト画面が表示されました。FS# を監視して VRAM への書き込みを同期することにより、画面のちらつきを抑えることが可能です。ただし FS# 同期、シリアルポートとの並行出力、ソフトウェアスクロールなど処理が増えるため描画速度は低下します。必要に応じて eeesw の設定を変えれば出力先を限定してある程度高速化できます。

Lambda-2022 の実装

現時点で Lambda-2022 内部の実装状況は次の画像のとおりです。

ついに SBC-Bus スロットがいっぱいになってしまいました。画像奥(筐体前面側)から

  1. DMA カード
  2. CPU/SRAM カード
  3. VDG カード
  4. I/O カード

が装着されています。フル装着時の負荷に備えて、このケースにはスイッチング電源を装備してあります。また SBC-Bus の +5V 供給ラインだけでは心もとないのでフロントパネルと I/O 端子には別のケーブルで電源を供給しています。筐体裏側にはビデオコネクタパネルおよびシリアルコネクタパネルを追加してあります。

コメントを残す