• タイトル
    モールス デバッグ ツール

  • 開発環境
    IchigojamBASIC1.3.1
    外部メモリ(AT24C256)

  • 内容
    BASICマガジンのプログラムを入力した時、必ずと言って良いほど入力間違いをしてしまいます。そんな時、「誰かがプログラムを読み上げてくれれば、読み合わせができるのに」と思ったことはありませんか?
    このプログラムは、入力したプログラムをIchigoJamがモールス信号で読み上げくれます。
    がんばってモールス信号を覚えれば、アマチュア無線の上級を目指したり、ジブリアニメのモールス信号のシーンも楽めるかも。

  • morseDeBug
  • 必要な機器
    読み合わせするプログラムは外部記憶装置(EEPROM)から読み込みますので、外部記憶装置が必須になります。
    通販ショップで購入することができます。(参考:https://ichigojam.net/get.html)
    またサウンド出力用にIchigoJamキット付属の圧電ブザーを取り付けておいてください。

  • 操作方法
    実行すると「FileNo ?」と、プログラムの保存番号を聞いてくるので、読み合わせしたいプログラムの保存番号を入力してください。(100番以後) 最初の行からプログラムが1文字ずつとそれに該当するモールス符号が表示、モールス信号が発信されます。 英文モールスのみなので、それ以外の文字(カタカナや絵文字など)は低い音の長音1つが鳴って読み飛ばされます。

  • モールス符号のコード化について
    モールス符号は下記の規則で8bitにコード化してあります。
    単音を0、長音を1として、8bitに右詰めで配置します。
    次に左の空きbitを最下位bitを1、それ以外を0としたビット列で埋めます。
    例えば、Aは・-なので、000001-01=#05、Zは--・・なので、0001-1100=#1Cとなります。(見やすくするため、モールス符号とビット埋めとの間にハイフンを配置しています。)
    これの符号化により、上位bitから1bitずつ調べていき、bitが1になった以後のbit並びがモールス符号になります。
    参考文献:FaceBook内IchigoJamグループより

  • プログラムのしくみ

    各行の処理
    10行コメント
    20行短点長さ設定、モールス符号をメモリ上に配置
    30行読込むファイル場号
    40行外部メモリの読込アドレス計算
    50行外部メモリの読込アドレスを指定
    60行外部メモリから3byte読込(行番号、1行文字数)
    70行プログラムが行末になったら(1行文字数=0)終了
    80行行番号をモールス符号出力
    90~110行1行を1文字ずつモールス符号変換
    120~140行1行終了処理
    150行英小文字→大文字変換
    160行コード化されたモールス符号を読み込む
    170~180行英文モールス以外の文字の処理
    190行コード化符号からモールス符号を取り出す
    200~260行モールス信号の表示と発信

  • プログラムの改造
    モールス信号の単音は変数Sです。値を小さくすると早くなります。
    本プログラムは和文モールスに対応していませんので、和文モールスも発信できるよう改造してみましょう。

モールス デバッグ ツール
10 'morseDeBug
20 S=10:POKE#700,107,82,0,0,0,40,94,54,109,34,42,115,97,85,50,63,47,39,35,33,32,48,56,60,62,120,0,0,49,0,76,90,5,24,26,12,2,18,14,16,4,23,13,20,7,6,15,22,29,10,8,3,9,17,11,25,27,28
30 CLS:?"FILENO ";:INPUTN:N=N-100:IFN<0GOTO30
40 [1]=N*1024:POKE#800,PEEK(#803),PEEK(#802)
50 A=I2CW(80,#800,2,#802,0)
60 A=I2CR(80,#800,0,#802,3):CLS:?DEC$([1],5)
70 C=PEEK(#804):IF!CEND
80 FORK=0TO4:B=PEEK(#900+K):IFB!=32GSB150
85 NEXT
90 FORK=0TOC
100 A=I2CR(80,#800,0,#802,1):B=PEEK(#802):GSB150
110 NEXT
120 R=R+2+C
130 IFR%2R=R+1:A=I2CR(80,#800,0,#802,1)
140 GOTO60
150 IFB>96&&B<123B=B-32
160 A=PEEK(#700+B-33)
170 IFB<33A=0
180 IFB>90A=0:?CHR$(B)
190 FORI=0TO7:IFA<128A=A*2:NEXT:BEEP30,99:WAITS*3:BEEP0:RTN
200 ?CHR$(B);" ";
210 FORJ=ITO6:A=A*2
220 BEEP15,99:IFA&128?"-";:WAITS*3ELSE?".";:WAITS
230 BEEP0:WAITS*3
240 NEXT
250 I=8:NEXT:?:WAITS*7
260 RTN

ダウンロードURLは下記になります。
morsedebug.bin http://tagiyasoft.blog.jp/morsedebug.bin

ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
(例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)

  • 参考
    モ-ルス符号(wiki)
    • タイトル
      点数占い

    • 開発環境
      IchigojamBASIC1.3.1
      IchigojamBASIC1.2.6RPi
      IchigojamBASIC1.2.2ap

    • 内容
      点数神様からの、ありがたいお告げがもらえます。
      信じる、信じないはあなた次第です。

    • tentori
    • 遊び方
      RUNするとお告げが表示されます。

    • プログラムの内容
      プログラムの大半が「お告げ文」のデータになっています。
      お告げ文は上の句と下の句に分かれています。
      プログラムを見ただけでお告げ文の内容が解ってしまうと面白くないので、簡単な暗号化を行って解読できないようにしています。

    • プログラムのしくみ

      変数表
      Aお告げ文の上の句の先等アドレス
      Bお告げ文の下の句の先等アドレス
      C表示するお告げ文の先等アドレス
      Jお告げ文を復号化した文字コード

      各行の処理
      1行コメント
      2行メインプログラム
      3~4行お告げ表示サブルーチン
      5~24行お告げデータ

    • プログラムの改造
      プログラム2は暗号化プログラムです。
      1行目の’以後に文を入力してRUNすると、上の行に元の文字列、下の行に暗号化された文字列が表示されます。
      お告げ文を好きなように変更してみましょう。
      メモリ残量が少ないのでお告げ文を増やすには、お告げ文データを別プログラムにしてLRUNで呼び出すなどしてください。

    点数占い(プログラム1)
    1 'テントリウラナイ
    2 CLS:CLV:COPY#E0*8,0,8:?"アナタ ノ ウンセイ ハ";:FORI=0TO2:WAIT30:?"・";:NEXT:?:?:GSB3:?" ト":GSB3:?" ヨ":?:?RND(11);"テン":END
    3 WAIT60:GSBRND(20)+5:IFCC=BELSEC=A
    4 FORI=0TO20:J=PEEK(C+I):J=(J+130)*(J!=34):POKE#708+I,J:NEXT:?STR$(#708);:RTN
    5 A="204\^$^NW":B="ッョョA[^BXW":RTN
    6 A="K\[5,1^;W":B="/:^4\^690":RTN
    7 A="7\.O^H\4V^:A0W":B="FO6^CW":RTN
    8 A="MU=[^;W":B="3[?^D^CW":RTN
    9 A="1B\[^4\^;5>\":B="1>^4\^1M6^CW":RTN
    10 A="J\>^G^MF$^;W":B="S1:,1^;W":RTN
    11 A="I]/G^4\^I7W":B="ーH\[^D^CW":RTN
    12 A="RM^D^GL\W":B="8M->":RTN
    13 A="I\-6V^;W":B="C7A^6W":RTN
    14 A="H-5V^01":B="07P[^D^CXW":RTN
    15 A="3JY^D^H0UC0":B="/J\C0":RTN
    16 A="5J\[^4\^T0":B="HC05^4\^/U6^CW":RTN
    17 A=">\[;^$^3B\W":B="S1X0^4\^A\W":RTN
    18 A="?86^$^;W":B="N;\O:^4\^4S6^CW":RTN
    19 A="U.P[^$^>K\W":B="3C4^4\^0>6^CW":RTN
    20 A="ZU-A^H\4V^0W":B="@-8N^:>6^CW":RTN
    21 A="9-4.^G^X[:+1^;W^":B="8\H[^4\^1M0":RTN
    22 A="M[4\^H\4V^T[A\^0W":B="S.?+.H\.^N>0^>\":RTN
    23 A="/DP^D^O?+1^D^CW":B="B0X^D^05>6^CW":RTN
    24 A="DRDR^:A0W":B="/P^4\^JW":RTN
    

    点数占い(プログラム2)
    1 'アンゴウ プログラム
    2 A=#C04
    3 ?STR$(A)
    4 B=PEEK(A):IFB?CHR$(B-130);:A=A+1:GOTO4
    5 ?
    

    ダウンロードURLは下記になります。
    tentori.bin http://tagiyasoft.blog.jp/tentori.bin

    ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
    (例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)

  • 参考
    点取り占い(wiki)
    大人も子供も楽しめるシュールな魅力、「点取り占い」にクローズアップ! 夢の1シート買いしてみた(ねとらぼ)
    • タイトル
      ソリティアボウリング
      (電子工作マガジン2019年SUMMER号 別冊附録マイコンBASICMagazine掲載)

    • 開発環境(動作確認機種)
      IchigojamBASIC1.3.1
      IchigojamBASIC1.2.6RPi
      IchigojamBASIC1.2.2ap

    • solitaire_BOWL
    • 内容
      トランプを使ったボウリングゲームです。
      山札のカードを小さい順に配置していき、置けなくなった時点で点数が決まります。
      5フレームで1ゲームとし、ボウリングと同じルールで点数をつけていきます。
      パーフェクトゲーム(5フレーム全てストライクを取ること。150点)を目指してください。

    • 遊び方
      画面上部にスコアボード、下部左にボウリングのピンに見立てたカード置場、右には上から1投目のカード捨場、2投目のカード捨場、右下に山札となっています。
      山札に表示されたカードをピンの場所に置きます。
      ピンに置くカードは数の小さい順に並べ、置けない時は右側のカード捨場に置きます。
      捨札2枚以下で全てのピンにカードが置ければストライク、捨札5枚以下ならスペアとなります。
      10ピン全てにカード置くか、捨札が6枚になると1フレーム終了で得点が計算されます。

    • 操作方法
      「ピン?」と表示されたらカードを置きたいピン番号(0~9)を入力します。
      カードを置けない場合は負の数字(例:-1)を入力します。

    • プログラムのしくみ
      プログラムリスト0はゲームのメイン部分で、プログラムリスト1は画面表示および得点計算をしています。
      LRUNで別プログラムを呼び出す時は、変数Lに戻り行番号を代入してから呼び出しています。
      プログラムリスト0
      1行コメント
      2行定数、キャラクタ定義
      3行キャラクタ定義、山札表示
      4行ピン位置入力
      5行画面表示ルーチン呼出
      6行倒れたピンの数
      7-8行1投ごとの点数計算
      9行フレーム終了時の変数クリア
      10行ゲーム終了チェック
      11行捨てカード処理
      12行ピン表示

      プログラムリスト1
      1行コメント
      2行枠線表示
      4-7行得点表示
      8行山札表示
      9行指定座標にカード表示

      配列変数
      0-9ピン
      10-12捨札(1投め)
      13-15捨札(2投め)
      16次の捨札位置
      17ボールを投げた数
      18山札
      20-261投めの点(1-7flame)
      30-362投めの点(1-7flame)
      41-53表示したカード(1-4bit)
      60-79ピン座標(X0,Y0,X1,Y1…)

    • プログラムの具体的な入力方法
      プログラムリスト0は保存番号0に、プログラムリスト1は保存番号1にSAVEしてください。

      罫線記号(カードの枠線)の入力は下記の通りです。

      左ALT+SHIFT+H
      左ALT+SHIFT+I
      左ALT+SHIFT+J
      左ALT+SHIFT+K
      左ALT+SHIFT+L
      左ALT+SHIFT+M
      左ALT+SHIFT+N
      左ALT+SHIFT+O(オー)
      左ALT+SHIFT+P
      左ALT+SHIFT+Q
      左ALT+SHIFT+R
      スペース1個

    • プログラムの改造
      プログラムを改造する場合は、キャラクタ定義や枠線表示を別プログラムにするなどしてメモリに空きを作ってください。

    • ソリティアボウリング(プログラム0)
      1 'ソリティアBOWL0
      2 CLV:CLP:CLS:FORI=20TO36:[I]=11:NEXT:LET[60],4,18,3,15,5,15,2,12,4,12,6,12,1,9,3,9,5,9,7,9:COPY#7D0,#750,8:POKE#750,129,195,231,255,255,231,195,129,0,0,0,0,0,0,0,0:COPY#768,#720,32:COPY#790,#190,64
      3 COPY#788,#208,8:COPY#7D8,#250,8:COPY#7E0,#288,8:COPY#7E8,#258,8:COPY#700,#168,8:COPY#708,#188,72:M=1<<RND(4):N=RND(13)+1:IF[40+N]&MCONTELSE[40+N]=[40+N]|M:[18]=M<<4+N:I=#760:L=4:LRUN1
      4 LC0,21:?CHR$(12);:INPUT"ピン? ",K:K=K%G:IFK<0[G+[16]]=[18]:[16]=[16]+1:L=11:LRUN1,4ELSEFORI=0TO9:IF[I]J=[I]&#F:L=[18]&#F:IF(I<K&&J>L)||(I>K&&J<L)||[K]?"オケマセン":WAIT60:I=9:NEXT:GOTO4
      5 NEXT:[K]=[18]:L=7:LRUN1,4
      6 P=G:FORI=0TO9:P=P-![I]:NEXT:RTN
      7 GSB6:IFP<GGOTO3ELSEIF[16]<3[20+[H]/2]=G:[H]=[H]+1:GOTO9
      8 [30+[H]/2]=P-[20+[H]/2]
      9 FORI=0TO16:[I]=0:[I+40]=0:NEXT
      10 A=[H]+1:[H]=A:B=[24]:IFA<G||(B+[34]=G&&A<11)||(B*[25]=100&&A<13)||(B=G&&A<12)GOTO3ELSEL=13:LRUN1,4
      11 IF[16]%3GOTO3ELSEGSB6:IF[16]=3[20+[H]/2]=P:GOTOGELSEGOTO8
      12 I=I+1:IFI>9GOTOLELSEIF[I]A=[60+I*2]:B=[61+I*2]:D=[I]:LRUN1,9ELSECONT
      13 LC0,22
      

      ソリティアボウリング(プログラム1)
      1 'ソリティアBOWL1
      2 G=10:?CHR$(19);"┏━━━┳━━━┳━━━┳━━━┳━━━━━┓":?:?"┣━┳━╋━┳━╋━┳━╋━┳━╋━┳━┳━┫":?"┃":?"┣━┻━╋━┻━╋━┻━╋━┻━╋━┻━┻━┫":?:?"┗━━━┻━━━┻━━━┻━━━┻━━━━━┛":?:?"┏━┳━┳━┳━┓□┏━┳━┳━┓":?"┃6┃7┃8┃9┃□┃□┃□┃□┃":?"┃□┃□┃□┃□┃□┃□┃□┃□┃
      3 COPYI,#4F8,8:?"┗┳┻┳┻┳┻┳┛□┗━┻━┻━┛":?"□┃3┃4┃5┃□□┏━┳━┳━┓":?"□┃□┃□┃□┃□□┃□┃□┃□┃":?"□┗┳┻┳┻┳┛□□┃□┃□┃□┃":?"□□┃1┃2┃□□□┗━┻━┻━┛":?"□□┃□┃□┃":?"□□┗┳┻┳┛□□□┏━┓":?"□□□┃0┃□□□□┃□┃":?"□□□┃□┃□□□□┃□┃":?"□□□┗━┛□□□□┗━┛
      4 L=-L:C=0:F=#E0:H=17:FORI=0TO4:E=[I+20]:A=E%11:B=[I+30]%11:D=A+B:LCI*4+1,3:?CHR$(E+F);"┃";CHR$([I+30]*(D<G)+12*(D=G)-(E=G)+F);"┃□┃":C=C+D:IFD=GD=[I+21]%11:C=C+D:IFA=GC=C+[I+31]%11:IFD=GC=C+[I+22]%11
      5 LCI*4,1:?"┃□";I+1:LC0,I*2-3:?"┃":LC22,I*2-3:?"┃":LCI*4,5:?"┃";DEC$(C,3):IF(I<3&&[G+I])A=I*2+11:B=9:D=[G+I]:GSB9:IF(I<3&&[13+I])A=I*2+11:B=13:D=[13+I]:GSB9
      6 NEXT:L=-L:A=[24]%11:B=[34]%11:IFA+B=GLC21,3:?CHR$([25]+F)
      7 IFA=G:LC19,3:?CHR$([25]+F);"┃";:IF[25]=G?CHR$([26]+F)ELSE?CHR$([35]+F)
      8 A=11:B=18:D=[18]:I=-1
      9 LCA,B:?CHR$((9-(D/16))*G/26+#ED):LCA,B+1:?CHR$((D&#F)+#F0):IFL<0RTNELSELRUN0,12
      

      ダウンロードURLは下記になります。
      solitaire_BOWL0.bin http://tagiyasoft.blog.jp/solitaire_BOWL0.bin solitaire_BOWL1.bin http://tagiyasoft.blog.jp/solitaire_BOWL1.bin
      ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
      (例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)

    • 参考ゲーム
      ソリティアボウリング

    ↑このページのトップヘ