BUTTON命令はその瞬間に押されてる(押した)ボタンに対応する数値を返します。
なので1回BUTTON命令を書いても何も起きません
B=BUTTON(2) これでBの変数に押されたボタンの数値を代入しますかっこの中の数値はオプションで命令表見ればわかります
IF B==16 THEN 処理 これでボタンの数値が16だったら(16はAボタンなのでAボタンが押されたら)その後の処理を実行させます
あとはこれを無限ループさせるだけです。なお複数のボタンを押した場合は押されたボタンの数値の足した合計が返ります
基本的な考え方は合っていると思います。
BUTTON関数の2つ目の引数は、ほかの3DSのボタン状態を調べるものなので、この場合は、指定する必要はありません。
BUTTON関数はユーザがボタンを押すまで待つ機能はありません。そのため、プログラムで待ち合わせをする必要があります。たとえば、以下のようにします。
REPEAT ' 無限ループの最初
WAIT '1フレーム待つ(VSYNCでも可)
BA=BUTTON(2) ' ボタン情報読み取り
IF BA AND 16 THEN BREAK ' Aボタンが押されたらループを抜ける
UNTIL FALSE ' 無限ループの最後(TRUEにならないので抜けられず無限ループになる)
PRINT "Aボタンが押されました"
折角なので、別の観点のアドバイス。
BA=BUTTON(2,16)
を実行すると、Out of range in SLOT:LINE(BUTTON)
と表示されるはず(SLOTとLINEは、それぞれプログラムスロット、プログラム中の行をあらわす数値)
Out of range(範囲外)と言うことから、引数(命令に渡す数値や文字など)が、指定できる範囲を越えている、と理解して、キーボード右上の?ボタンから、BUTTON命令の説明(特に引数の説明)をよく確認する。
と言うアプローチで僕は問題解決を考えています。