SORD M68にUSBキーボードを接続するための変換機を作りました。
一度、SORD M68のキーボード周りについてまとめます。
SORD M68のキーボードインターフェース回路は以下のようになっています。

キーボードコネクタのピン配置は以下のようになっています。

重要なのは、Pin1、Pin3、Pin4、Pin5です。
SORD M68のキーボードはSORD M68の"Z80バス"という各種ペリフェラルが接続されたバスに繋がれています。SORD M68側から、キーボードマトリックススキャンのタイミングが知らされ、キーボードマトリックスの押下情報がパラレル=シリアル変換器である74LS166のQhピンからシリアルデータとしてバスに流されます。
この変換器のコンセプトは、USBキーボードの押下情報をRaspberry pi Pico2を介して、74LS166の入力(A..H)に入れることでM68のキーボード押下情報に見せかけようというものです。74LS166の/PE(/LOAD)信号の立下りで、パラレルからシリアル変換が行われるので、この信号をPico2で監視します。

下の画像はキーボードマトリックスにおける各ICの接続状況です。例えば、"11:166"とあるのは74LS166の11番ピン(F)に接続されている行であることを示しています。同様に、”1:159"は、74159の1番ピン(/S0)に接続されている列であることを示しています。スキャンは、159の1..15の順に行われます。16番目は未接続なのでスキャンされません。キーボードマトリックスの押下情報はアイドルHIGHです。押下されるとLOWになります。
例えば、"A"キーを押した場合、"A"キーは74159の2番ピンと74LS166の5番ピンに接続されています。よって、2列目のスキャン、つまり、2度目の/PEの立下りで、11101111が出力されれば、M68によって"A"キー押下と認識されます。

スキャンしたデータはM68のI/Oポート0xE0~0xEFに入ります。スキャンされない0xEFは常に0です。
このような仕様の為、Pico2が現在スキャンしている列を見失うと、キー押下情報の取得は不可能になります。その為、Pico2は可能な限り素早く起動して、M68が最初の/PE信号立下りの瞬間を逃さないようにしなくてはなりませんし、以後も取りこぼしは許されません。Pico2の処理速度的には問題ないはずですが実現困難だった為、解決策として最初のバージョンでは負荷の分散を目的にPico2を2台用いて、USBキーボードとの通信用とM68キー押下情報生成用に分けて設計しました。以下が回路図です。
回路図が小さくて見づらいですが、kicadファイルをgithubにアップロードしています。
ソフトウェアも同じくgithubにアップロードしました。
USBキーボードのキーコードを受けとるPico2用のコードもgithubにあります。
この変換機用に以前移植したCP/M80のキーボードドライバを修正しました。これもgithubにアップロードしました。CPM62K_M68_20ms01.imgが、修正後のCP/M80が収録されたRawディスクイメージです。