プチコンで遊ぼう! (はてなブログ版)

任天堂3DSのプチコンで遊ぼう! [twitter:@eida_s]

はてなダイアリーから移行しました。 はてなダイアリーのURLを開いても自動的にこちらにリダイレクトされますのでご了承ください。

タートルグラフィックス for プチコン V0.3

タートルグラフィックス for プチコンをV0.3に更新しました。
今回の変更は予定通り、簡易的な変数の導入です。ついでにスタックを導入して四則演算ができるようにしました。

現在は、パーサーを簡略化するため、1オペランド固定の文法になっています。
そこで、2項演算子を使うためにスタックを導入しました。
スタックに値を積んでおくと、2つの値を取り出して、演算結果を再度スタックに積み直す、というイメージです。

ソースはgist.githubからどうぞ。
タートルグラフィックス V0.3のソース


V0.2からの追加箇所概要:
・変数(レジスタ)10個を追加。
変数への代入は R0~R9コマンドを利用。
変数からの値の参照は オペランドに $0~$9を指定。
・ユーザースタックを追加。
変数・スタック間のPUSH・POPはPS、PPコマンド。
オペランドの直接PUSH・POPはDS、DPコマンド。
・ユーザースタックの四則演算を追加。
+・−・×・÷はそれぞれAD、SB、ML、DVコマンド。
オペランドに指定された値を表示するメッセージコマンド追加。MSコマンド。
・システム変数$@を追加。
 最も内側のループの残りループ回数を返す。
・システム変数$%を追加。
 最後にユーザースタックにPUSH・POPされた値を返す。

追加箇所詳細:
◆変数
R0〜R9コマンドで代入。参照はオペランドに$0〜$9を指定。

R0 30 R1 20 RT $0 FW $1


◆スタック
変数との間のPUSH・POPはPS、PPコマンドを使う。オペランドには変数の番号を指定する。
変数1をスタックに積み、スタックから変数2にPOPする例

PS 1 PP 2

直接スタックに値をPUSHするにはDSコマンドを使う。また、DPコマンドでPOPできるが、値は変数等には代入されない。(後述の$%で値の取り出しは可能)

DS 100 DP 0 MS $%

([100]と表示される。)

◆メッセージ
オペランドの値を画面に表示する。MSコマンド。
[値] のように表示される。

MS 0 R1 5 MS $1

([0]
[5] と表示される。)

◆四則演算
スタックに積まれた値を使って四則演算を行う。
+ → ADコマンド(ADD)
− → SBコマンド(SUBSTRACT)
× → MLコマンド(MULTIPLICATE)
÷ → DVコマンド(DIVIDE)

2+3を計算し、変数1に代入し、変数1の値を表示する例

DS 2 DS 3 AD 0 PP 1 MS $1

([5]と表示される)

なお、先にスタックに積まれている値が第1項となるので、次の例では結果が -1 となることに注意。

DS 2 DS 3 SB 0 PP 1 MS $1

([-1]と表示される)

また、DVコマンド実行時に、第2項が0である場合、DIVIDE BY ZEROのエラーが発生する。

◆システム変数
・システム変数$@を追加。
 最も内側のループの残りループ回数を返す。
・システム変数$%を追加。
 最後にユーザースタックにPUSH・POPされた値を返す。



次回以降のバージョンアップでは、サブプログラムの呼び出しを予定しています。
今回導入したスタックと合わせると、再帰的プログラムができるようになるので、コッホ曲線等のフラクタル図形を描けるようにするのが当面の目標です。


今まで書き写し間違えが多かったので、まとめWiki掲載のQR化エクスポートを使ってソースを出力しなおしました。
(V0.2にコメント部分などに一部間違いがありましたが、致命的な間違いはありませんでした。)

なお、旧版(V0.2版)のソースへのリンクは以下です。
タートルグラフィックス V0.2(旧版)のソース