このようなキーボードをコンピュータに接続する場合、CPU からは 7 ビット ASCII コードは通常の I/O ポート入力として読み出せばいいのですが、Strobe 信号は立ち上がりでフラグがセットされるフリップフロップとして保持し、CPU から任意の時点で読みに行けるようにしておく機構が必要です。また、ASCII コードを読み出したときにフラグが自動的にクリアされると便利です。Λ-1 コンピュータでは MC6821 PIA の CA 入力を使用することでキーボードからの Strobe 出力に即した設定が可能です。ASCII コードの 7 ビット出力は PIA の 8 ビットポート PA に接続します[注 1]。
実は Apple II のキーボードインターフェイスも全く同じ構成です[注 2]。違いは ASCII コードが負論理(Λ-1)か、正論理(Apple II)かという点だけです。したがって LMD-3420 のファームウェア(qmk_firmware のカスタムコード)で ASCII コードのビット反転操作を無効にすれば Apple II へ接続できます [注 3]。
Apple II のキーボード端子は 16 ピンの IC ソケットで、下図のピン配列になっています。これにあわせて LMD-3420 キーボード基板にも同様の配列の 16 ピンソケットを用意しました。上の画像でいうと基板上端の右寄りのソケット(ケーブルが取り付けられていない)です。
Apple II キーボード端子と LMD-3420 キーボードを 16 pin DIP 端子のフラットケーブルで接続します。DIP ソケット対応のコネクタ端子は最近あまり見かけませんが、当時はそれなりに使われていました。
不足キーキャップはいずれ 3D プリントでカスタム設計することにしますが、上に挙げたキーキャップをすべて作り直すと R1〜R4 までまんべんなく設計する必要があり、作業量を考えると二の足を踏みます。しかし、実は同行・同サイズのキーはキーキャップセット内を探せば割とあるのです。レジェンド刻印のみ異なるキーキャップを再利用すればいいわけです。こういったキーキャップの再利用を検討に含めるとカスタムメイドが必要なキーキャップの数を減らせます。
レジェンド刻印を無視すれば次のキーが不足するということになります。
Backspace: R4, 1.5u
R-Shift: R1, 2u(キーキャップセットによる)
Space: Convex, 8u
また今回は XVX プロファイルのキーキャップセットを使いましたが、これは必要となる 1.5u、2u のキーキャップがそれなりに揃っているという理由で選択したものです。最終的にいくつかのキーキャップを自作して補充するのであればよりクラシックな SA プロファイルのキーキャップセットを選択するという手もあり、このあたりはまだ決めかねています。
PIA に接続する他の回路、つまりキーボード入力ポートや K68-VDG の垂直同期信号入力ポートなどもこの回路図に含まれます。図の中央付近がテープレコーダ録音再生のための変復調回路ですが、面白いのはカセットテープから再生された音声信号をパルス幅測定に適した波形に加工する復調回路です。入力音声信号をクランプ回路でクリップしたあとでコンパレータを通して矩形波に整形するのですが、Λ-1 の設計ではコンパレータとしてオーディオレベルメータ用 IC の三洋 LB1405 を使います。レベルメータ LED を見ながら入力レベルを調節できます。
カセットデッキは SONY のエントリレベルモデルを中古で入手しました。今となっては 3 ヘッドの中堅機あたりでも中古価格は大差ないのでしょうが[注 1]、メカや回路がシンプルな方がメンテナンスが容易になり、またデータ信号波形に余計な色がつかなくて良いのではと考えました。当然ドルビー NR は無効にして録音します。
当時オシロは高価な機器だったため、専門家以外が簡単に使えるものではありませんでした。こういったアナログ絡みの回路をオシロの助けなしに上手く動作させるには長時間のカットアンドトライが必要になったはずです。Λ-1 のカセットインターフェイス回路に LED レベルメータが組み込まれているのも、調整作業が少しでも簡単になるようにという配慮があってのことと思われます。
旧 CPU カードと同じ要領で部品を組み付けます(今回も配線ミスがありジャンパが必要になりました)。最初に CPU カードのみテストします。まず SRAMSEL ピンをプルアップして CPU カード単体で SRAM を常時有効にします。その後、旧 CPU カードと入れ替える形でバススロットに装着します。この時点で Lambda-2022 システムには 64KB フル RAM を実装した新 CPU カードと DMA カードが接続されています。
***
* memtest $0000-$7fff
***
*
* set val to write
val equ $55 ; test val
erradr equ $8100 ; address where test failed
mstart equ $0000 ; mem test start addr
mend equ $8000 ; mem test end addr + 1
*
org mend
start ldx #mstart-1
stx erradr ; if (erradr)=mstart-1, test succeeded; otherwize test failed
inx
ldaa #val
loop staa 0,X
cmpa 0,X
beq ok
stx erradr
bra endl ; test failed, end prog
ok inx
cpx #mend
bne loop
endl bra endl
*
end
MikBug の L コマンドを使って S19 データを流し込み、Hello World プログラムを実行しました。シリアルコンソールと L コマンドがこんなに有り難く感じたことはありません。フロントパネルスイッチをパチパチと操作して 1 バイトずつ入力する作業に比べると数段楽です。まあ、そのパチパチ操作のために Λ-1 を作ったのですから本末転倒する感想ではありますが、シリアルコンソールとモニタ ROM が動いた時点でフロントパネル DMA の必要性が失われてしまうのは事実です。
MikBug のコンソールが動いたので ACIA はテスト済みとみなします。次に PIA について 2 つのテストを行います。
PA / PB ポート:L チカ
PIA0 に MC6821 PIA をセットします。PIA0 のレジスタにはアドレス $f008-$f00b でアクセスできますので、全ポートを出力に設定した上で適当なループタイマを挟んで PortA と PortB の両方に $00 と $ff を交互に書き込みます。20 回繰り返したらプログラムを終了します。
「L チカ」と称する以上は適当なドライブ回路を PIA ポートに接続して LED を点滅させるのが筋ですが、面倒なので PIA ポート出力をロジアナで直接測定します。下の画面では D0 が PA0、D4 が PB0 に接続されており残りのチャネルは未接続です。