「つつがなく終了しましたのでお知らせします」

 2月25日の夕方,妻の携帯に届いたメール。つい,お見合いでもしたのかと突っ込んでしまった。実は大阪で前期日程試験を受けていたこうしろうからのメールだ。

 夜12時に少し前,高岡駅に迎えに行った。こうしろうの話によると,遠方からの受験生の多くに親が付いて来ていたらしい。アパートのチラシを配る業者は,親子連れをターゲットにしているので,一人で受験に行ったこうしろうは,自宅通学と間違えられてチラシをもらえなかった。

 夏休みになると何かと理由を作って関東か関西に行っていたこうしろうにとって大阪は四度目になる。母は地理に不案内だし,父はきっと遅くまで飲んでしまい,こうしろうの邪魔にしかならないだろう。
 
 さて,とっとと本題に入ろう。数年前から私は,ネットワークアシストたかおかという団体で小学生を相手にロボットプログラミングを教えている。その様子は,この日記にも何度か書いたが,時間がある時はこうしろうもサポータとして参加してくれた。

 プログラミングにはROBOLABというソフトウエアを使用している。コマンドアイコンをつなぐ配線が面倒だったり,本当につながっているかどうかパッと見にわかりにくかったりするので,不平を言う児童や指導者もいる。

 しかし,ROBOLABはなかなか高機能なソフトウエアなのである。その一つが,LASMを出力する機能である。

 LASMでGoogle検索すると,一番上位に表示されるのはLight Macro Assemblerであるが,これではない。その次あたりに表示されるLEGO Assembly Languageが今回紹介するLASMである。

 たとえば,これはAとCのモーターを6秒間順方向に回し,止めるプログラムである。このプログラムの最初にある開始コマンド(青信号)を上級カテゴリにあるLASMの開始コマンドに置き換える。

 そして,実行ボタン(矢印)をクリックする。

 そうすると,LASMのコードが表示される。この画面でSave Text Fileをクリックして,テキストファイルにアセンブラのコードを保存することができる。
 -----------------------------------------
 delt 0
 
 task 0
 pwr 1,2,7
 dir 2,1
 out 2,1
 pwr 4,2,7
 dir 2,4
 out 2,4
 wait 2,600
 out 1,1
 out 1,4
 endt
 
 plays 5
 -----------------------------------------

  LASMのコードを理解するには,LEGO社のサイトからMindStorms SDKをダウンロードする必要がある。解凍して出来たexeファイルを実行すると,Windowsのメニューから,LASM byte codes.pdfを開くことができるようになる。
 
 LASM byte codes.pdfを読めば,deltはDeleteAllTasksであり,pwrコマンドの引数はpwr motor list,power source,power valueであることがわかる。

 ROBOLABのAのモーターを順方向に回すというコマンドが,pwr 1,2,7,dir 2,1,out 2,1という三つのLASMコマンドに展開されている。

 dirの引数はdir direction,motor listなので,2がforward(順方向),1がモーターAを示す。outの引数はout onofffloat, motor list である。Onofffloatの値はfloat:0,off:1,on:2だ。

 6秒待つはwait 2,600とアセンブリされている。
 
 このLASMのコードが,そのままバイトコードに変換されMindStormsの本体RCXに転送されるのだから,ROBOLABのプログラムがどのようにLASM化されるかを知ることで,より理解が深まり,ロボットの予想外の挙動に対処できるようになるだろう。