SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

モールス符号変換

FacebookIchigoJam-FANグループで、モールス符号変換のプログラムを作った方がいたのですが、3スロット使う長いプログラムだったので、何とか短縮できないかと思って、私も作ってみました。
入力された1文字をモールス符号に変換する単機能プログラムですが、何とか1スロットに収まりました。

f:id:shiro0922:20190420232515p:plain

使い方

  • プログラムを実行すると、文字入力待ちになります。キーを押して1文字入力すると、それに対応したモールス符号を表示します。対応するのは、アルファベット、数字、カタカナ、記号の一部です。
  • ただしカタカナを入力すると、例えば「ア」はそのまま「ア」の符号が表示されますが、「カ」だと1ストローク目の「K」の符号と、2ストローク目で確定した「カ」の符号の2個が表示されます。また「バ」などの濁点・半濁点の文字は、「B」「ハ」「濁点」の3つの符号が表示されてしまいます。プログラム側で現在のキー入力モードを把握できないので、ご勘弁ください。

符号表

モールス符号は短点(・)と長点(-)の組み合わせでできていて、しかも1~6点の可変長です。
そのためプログラム内では、短点=1、長点=2、終了=0として3進数符号にして、それを10進数に変換したデータを設定しています。
(プログラムの都合で、3進数符号の1文字目→6文字目を、下位→上位で計算して10進数へ変換しています)
3進数符号で最大6桁になりますが、10進数に変換すると255を越えてしまうので、データ格納には2バイト必要です。
IchigoJam文字コード(256文字)の中で、モールス符号が割り振られている文字は118文字です(実際は一部が飛んでいるので若干少ない)。配列変数102個では足りないため、PCG領域(#700~#7FF)へ1文字2バイトずつデータを書きこんで使っています。
f:id:shiro0922:20190420231536p:plain

プログラム

1Kバイトギリギリなので、これ以上は機能が増やせません(^_^;)

1 CLS:?"*Morse Encode"
2 CLV:POKE#700,186,2,192,1,0,0,0,0,0,0
3 POKE#70A,124,0,228,1,158,0,132,2,148,0,151,0,180,2,96,2,125,2,149,0
4 POKE#71E,242,0,241,0,238,0,229,0,202,0,121,0,122,0,125,0,134,0,161,0,121,1
5 POKE#734,0,0,0,0,203,0,0,0,144,1,201,1
6 POKE#740,7,0,41,0,50,0,14,0,1,0,49,0,17,0,40,0,4,0,79,0,23,0,43,0,8,0,5,0,26,0,52,0
7 POKE#760,71,0,16,0,13,0,2,0,22,0,67,0,25,0,68,0,77,0,44,0
8 POKE#774,138,1,125,2,0,0,79,0,233,0,7,0,22,0,239,0,124,0,25,0,230,0,8,0,52,0,214,0
9 POKE#790,233,0,7,0,22,0,239,0,124,0,43,0,131,0,67,0,77,0,80,0
10 POKE#7A4,212,0,152,0,215,0,160,0,53,0,5,0,49,0,52,0,232,0,130,0
11 POKE#7B8,16,0,50,0,40,0,71,0,76,0,41,0,206,0,44,0,1,0,14,0
12 POKE#7CC,68,0,211,0,2,0,203,0,149,0,25,0,230,0,8,0
13 POKE#7DC,13,0,17,0,158,0,26,0,70,0,23,0,151,0,4,0,157,0
14 ?"CHR?=";
15 K=INKEY():IF K<33 || 223<K || (90<K && K<163) CONT
16 ?CHR$(K);" ";:K=K-33:IF K>128 K=K-72
17 A=#700+K*2
18 D=PEEK(A):E=PEEK(A+1):M=E*256+D
19 N=M%3:IF!N?:GOTO14
20 IFN=1?".";ELSE?"_";
21 M=M/3:GOTO19

Web版はこちら。

モールス符号は今回初めて扱いましたが、いろいろ勉強になりました。
昔の電信技術者は、よくこんな符号を考えましたね。