BASICマシンのIchigoJamでCW用のキーヤーを作ってみました。
英語キーボードからの入力で、アルファベットと数字、"/","?"をCWで出力します。
必要最小限の機能に絞ったためBTとかARなどの連文字は打てません。
出力はLEDのON/OFFにしてあります。OUTを使ってもいいでしょう。
LED出力をCMOSロジックで引っ張り出すか、フォトカプラで絶縁して引っ張り、リレーを駆動することを想定しています。
"?"以外は一バイトで表現できるので、データ量の圧縮にいくらかの効果があると思います。"↑","↓"でキーイングの速度を変えられますが、リアルタイムには変えられません。
データ構造は頭の3bitがバー・ドットの数("A"なら010=2)を表し、下位の5bitがバーかドットかを表します(1でバー0でドット)。このためバーとドットの要素は五個までに限られるので、"?"だけは別処理しています。
実はこれ、学生時代に作ったポケコンキーヤーとはデータ構造が異なります。拙者が作った後に発表されたポケコンキーヤーとほぼ同じ構造です。メリットはそのものズバリ、データ量の削減です。
一文字分のデータを32で割るとバー・ドットの数が得られます(整数の割り算ですから、小数点以下は切り捨てられます)。下位の5bitは&h1Fとの論理積で取り出してますが、実はこの操作は不要だと気づいてしまいました!上位3bitは読みとらないからです。
だもんで270行の『B=[A]&#1F』はいらないと思います。
バーかドットかはLSBが"1"か"0"かを取り出して処理します。そして必要な回数ビットシフト(B=B>>1)して繰り返します。このためデータパターンはCWのパターンと比べ反転します("A"なら00001ではなくて00010になる)。
"?"だけは要素が6なので、上位3bitに相当する変数Cに110→6を代入し、下位5bitに相当する変数Bに001100→&hC=12を代入して出力ルーチン300行にとばします。
各文字コードに対応する配列変数に上記のような構造のデータを書き込み(110,120行)、"?"と"↑","↓"以外は対応する配列変数からデータを読み込みます。本来なら変数を全て初期化(0)するところですが、必要性がないので省いています。
データの作成に表計算ソフトを使うと間違いがない。