Λ-1/Lambda-2022 の拡張(5)Chick-Bug 移植

オリジナル Chick-Bug は Λ-1 に接続されたパラレルインターフェイスのキーボードと VDG ディスプレイをコンソールとして使用しますが、今回作成する Lambda-2022 システムではコンソールとして ACIA シリアル回線を追加しています。またメモリマップも変更がありますので、これらに対応するため Chick-Bug を次のように変更します。

ワークエリア:オリジナル Chick-Bug ではスタックを含むワークエリアが $F700-$F7FF に設定されていました。他の用途と干渉しない RAM 領域 $A600-$A6FF に変更します。

PIA アドレス:オリジナル Chick-Bug の PIA アドレス $EE00..$EE03 を今回作成した I/O ボードの PIA0 アドレス $F008..$F00B に変更します。

VDG アドレス:オリジナル Chick-Bug の VRAM アドレス $F000-$F1FF を $C000-$C1FF に変更します。またシステム初期化時に VDG コントロールレジスタ($F048)に適切な値を設定します。

ACIA 初期化:SBC68 版 MikBug 同様に ACIA を初期化します。システムリセットルーチン restp 内で ACIA 初期化ルーチンを呼び出します。

PIA、ACIA の接続状況は次のようになります。

Desc.DEVI/O RegisterOrig Addr.New Addr.
K/b asciiPIA0PA0-6pdra1$ee00:b0-6$f008
6847 vsyncPIA0PA7pdra1$ee00:bit7$f008
k/b strobePIA0CA1pcra1$ee01:bit7$f009
k/b ATN NMIPIA0CA2pcra1$ee01:bit6$f009
tape mtrPIA0PB1pdrb1$ee02:bit1$f00A
tape outPIA0PB0pdrb1$ee02:bit0$f00A
tape inPIA0PB7pdrb1$ee02:bit7$f00A
tape inPIA0CB1pcrb1$ee03:bit7$f00B
SerialACIACSaciacs$f028
SerialACIADAaciada$f029

Chick-Bug はプロンプト呼び出しのためにハードウェア割り込みスイッチを使いますが、これは元設計通り PIA0 CA2 へ接続します。当面は、前回 PIA のテストに使用したブレッドボード回路をそのまま流用します。

シリアルコンソール対応

冒頭に述べたように、オリジナル Λ-1 のコンソールに加えて ACIA シリアルコンソールをサポートしようと思います。将来的には VDG/パラレルキーボードとシリアル入出力を切り替えるようにしますが、当面はシリアル入出力のみ対応するコードを書きます。次の要領で 機能を変更します。

入力:オリジナル Chick-Bug では PIA0 PA ポートと CA1 に接続されたパラレルインターフェイスキーボードから入力を読み取っていました。これをシリアル入力に置き替えます。

  1. kbread ルーチンの処理をシリアル入力処理に置き換える。
  2. シリアル入力処理は SBC シリーズ版 MicBug の ineee ルーチンを参考にして記述する。

出力:オリジナル Chick-Bug では文字出力は VDG のテキスト画面へ送られますが、シリアルコンソールに同等の内容を出力できるようにします。VDG への文字出力はおもに disp1c で行われますが、画面クリアやスクロールなどの処理で VDG 直接操作があり、これらすべてをシリアルコンソール対応処理に変更します。次のように改造します。

  1. Chick-bug の中で VDG VRAM 操作に関連するルーチン(cpoint、vramt1 を直接使用する処理)を特定する。
  2. 該当する下記のルーチンをシリアル出力(outeee)対応に書き換える。
clear1, chmark, clrhm1, lf, crlf, bs, disp1c, scrolu

初期化の部分を除くと Chick-Bug モニタの他の部分から表示のために呼び出されるのは disp1c だけのようです。将来的に VDG/シリアル出力を切り替える場合は、disp1c 内で切り替え判定をすれば十分です。

シリアルコンソールの処理では HOME、CLEAR などのエスケープコードを使用します。

改変後の Chick-Bug ソース内のアドレス配置は次のとおりです。

$a600-$a66b   :システムワークエリア
$a6ff                :スタックトップ
$f080-$fa74      : Chick-Bug コード

***

以上の要領で移植作業を進めます。Chick-Bug はもともと Λ-1 ハードウェア用に書かれたモニタプログラムなのでこれを改変することを「移植」と言うのも少し変ですが、ともかく上記の方針に沿って書き換えます。

Chick-Bug 動作確認

書き換えた Chick-Bug はシリアルコンソール上での対話ができるようになっています。各コマンドの動作画面は次のとおりです。

‘M’ コマンドはメモリ内容の表示と書き換えです。

’G’ はユーザプログラム実行、’B’ はブレークポイントの設定/確認/解除です。

カセットテープインターフェイスコマンドの確認

カセットテープのロード/セーブ機能の確認はカセットレコーダインターフェイス回路を作ってから行います。

VDG 上の動作画面

本来の出力である VDG 画面はまだ確認できません。今後 VDG 回路を追加したときに確認します。

なお今回使用する予定の K68-VDG では 6847 の反転文字と通常文字を区別しているので、Chick-Bug が印字する通常の ASCII 文字($20-$5F)は後半のみ反転します。VDG 出力時に表示コードを適宜変換する必要があります。

今後の計画

全部できるかどうかわからない予定を再度並べてみます。

  • K68-VDG の接続
  • カセットテープレコーダ回路の作成とテスト
  • パラレルインターフェイスキーボードの作成

コメントを残す