NXT Byte Code (NBC) Programming

ここんところ、NXT関連の記事が続いていますが、今日もNXTに関する記事。
NXTではGUIを使ったプログラミングをするためのソフトウエアがついているが、やっぱりプログラムといえばテキストエディタだよねぇ、ということで、テキストエディタでプログラムを書く方法を見つけたので、紹介する。

The bNXT Blog On Lego Mindstorms NXTというサイトのGetting Started with NXT Byte Code (NBC) Programmingという記事から。すんません、英語のBlogです。

まず、BricxCCをインストールします。

BricxCCとは、Bricx Command Centerの略で、Legoのコンピュータのソフトウエアを開発するための、IDEのことです。

元は、RCX、Scout、Sybermaster、SpybotをNQC(Not Quite C)というCまがいの言語でプログラムする開発環境で、最近、NXTをNext Byte Codes(NBC)で開発することもサポートされました。

sourceforgeのBricx Command Centerで開発されています。

僕は、http://bricxcc.sourceforge.net/test_release.zip に置かれているバージョンで試しました。このファイルをダウンロードしてProgram Filesの中にでも展開しておきます。

次に、Next Byte Codes (NBC)をインストールします。

これは、NBCと呼ばれるアセンブラに似た言語で、NXTのプログラムを作成するためのコンパイラ?です。
Beta Releaseのページの0.1.4 b4 というバージョンのWin32版をダウンロードして試しました。

http://bricxcc.sourceforge.net/nbc/beta/nbc-0.1.4.b4.zip からファイルをダウンロードして、先ほどのBricxCCを展開したフォルダに展開しておきます。

次に環境を整えます。

まず、NXTをUSBでPCに接続して、電源を入れて起きます。

先ほど、BricxCCを展開したフォルダ内にある、BricxCC.exeをダブルクリックして起動します。

FindBrick
このような画面が出てきますので、Portをusbに、Brick TypeをNXTにします。
FirmwareはStandardをチェックして、OKを押します。 

もし、このダイアログが出てこないで、BrixCC
となってしまったら、メニューの「Tools」から、「Find Brick」を選らべば出てきます。

BrixCC2

次に、NBCのパスを指定します。
メニューの「Edit」から「Preferences…」を選択します。

preferences
「Compiler」タブの「NBC」タブを選んで、「EXE path」の項目に、先ほどNBCを配置した、C:Program FilesBricxCCを指定します。ここはパスを指定すればOK。

OKを押して閉じます。

これで環境が整いました。

では、早速、簡単なプログラムを書いてみましょう。

メニューから「File」のNewを選びます。

untitled

空のファイルが開きました。
ここに以下のプログラムを入力してください。

#include “NXTDefs.h”
// Always include the above

// Segments declare variables or types
dseg segment
  // Variables are always global.
  // Define variable dtArgs of type TDrawText
  dtArgs TDrawText /* see Syscall DrawText docs */
dseg ends

// Code is organized in threads
thread main
  // Set is to store scalar constants
  // For instance, set X location to 1
  // X is a member of the TDrawText struct
  set dtArgs.Location.X, 1
  set dtArgs.Location.Y, 1
  set dtArgs.Options, 1 /* erase previous text */
  // Mov is to copy more complex data
  mov dtArgs.Text, ‘Hello World’

  // Write to the screen
  // by calling the Lego firmware

  syscall DrawText, dtArgs

  // Wait forever so the user sees the screen
Endless:
  jmp Endless
endt

できたら、メニューの「File」から「Save」を選択して保存します。この際、ファイルの種類は、「Next Byte Code Files (*.nbc)」を選択します。

untitledNBC

ではコンパイルして転送して実行してみます。

[F5]を押すか、メニューの「Compile」から「Compile」を選択するとコンパイルされます。

Error
エラーが出ると、このように表示されるので、修正してください。

「F6」を押すか、メニューの「Compile」から「Download」を選択すると、コンパイル結果がNXTに転送されます。この際、プログラム名はファイル名となります。上書きされてしまうことも考えられますので注意してください。

転送が成功しても何も画面上は変化がありません。NXT上も画面では変化がありませんが、Softwear filesの中にはちゃんとプログラムが転送されています。

NXTから実行するか、「F7」を押すか、メニューの「Compile」から「Run」を選択するとプログラムが実行されます。

ちゃんと、NXTの画面の左下に「Hello World」と表示されましたか?

「F8」を押すか、メニューの「Compile」から「Stop」を選択すると、プログラムを停止することができます。

CTRL+[F5]で、コンパイルから転送、実行まで一発で行うこともできます。

全てコマンドラインで行う場合は、

nbc.exe -S=usb -d Untitled1.nbc

でコンパイルと転送を行うことができます。

nbc.exe -O=Untitled1.rxe Untitled1.nbc

でコンパイルだけを行うこともできます。NXTのソフトウエアを使って転送しましょう。

nbc.exe -x Untitled1.rxe

で逆アセンブリ(decompile)をすることもできます。GUIで書いたコードがどのようなバイトコードに落ちているのか見るのも一興かと。

http://bricxcc.sourceforge.net/nbc/doc/NBCManual.zip に詳しいNBCのマニュアルがあります。とはいえ、僕もまだぜんぜん読んでいません。唯一31ページ目の「Snippets: Outputs」のサンプルコードを実行してみて、モータを動かすことを試したくらいです。

http://bricxcc.sourceforge.net/nbc/samples/index.html にいくつかサンプルコードがありますが、まだ、ちゃんと読んでいません。

Legoのページで公開されている、LEGO MINDSTORM NXT Executable File Specification.pdfと、NBCとは表記の方法が違います。NBCはx86チックなアセンブラになっていますが、公式なバイトコードのドキュメントでは、OP_ADDのようにマクロみたいになっています。

BricxCCでは、NXTとのコミュニケーションに、BlueToothの指定とCOMポート番号の指定があるので、もしかして、、と思い試してみましたが、やっぱりD-LinkのDBT-120ではうまく繋がりませんでした。

まぁなにはともあれ、第一歩ということで。。。

コメントを残す