tunozemichanの日記 / tunozemichan's diary

SORD社のコンピューターM68やM68MXの解析についての備忘録です。This blog is a memorandum about the analysis of SORD's computers M68 and M68MX.

SORD M68にUSBキーボードを接続するための変換器を作る

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.com

ソフトウェアも同じくgithubにアップロードしました。

github.com

USBキーボードのキーコードを受けとるPico2用のコードもgithubにあります。

github.com

 

この変換機用に以前移植したCP/M80のキーボードドライバを修正しました。これもgithubにアップロードしました。CPM62K_M68_20ms01.imgが、修正後のCP/M80が収録されたRawディスクイメージです。

github.com