rftgyふじこlp:今は反芻している…JP1NOM

のんべんだらりと生きてしまいましたよ。

今日のIchigoJam

2015年11月08日 07時04分00秒 | IchigoJam
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)するところですが、必要性がないので省いています。





データの作成に表計算ソフトを使うと間違いがない。