Linux Zaurus、玄箱PRO、Raspberry Pi 用 rvtl (2015/10/05)

rvtl は Tiny Basic系のプログラミング環境です。アセンブラで作成しているため、 25キロバイトほどの非常に小さいプログラムですが、豊富な機能を持っています。 ライブラリは全く使用していません。Linuxカーネルさえあれば動作します。 メモリに余裕がない環境でも「ちまちま」とプログラム開発できます (^_^)v

BASIC言語系のインタプリタ、エディタ、コマンドラインのヒストリ機能と ファイル名補完、組み込みコマンドとしてLinuxの基本コマンド(ls, cat, cd, mkdir, rm, mount, unmount, chmod, mv, rmdir, sync, pwd) や上級者向けコマンド (chroot, pivot_root, swapon, swapoff, exec)が使用できます。

さらに比較的簡単にグラフィックでゲームを作成できるようにフレームバッファ に対するパターン転送(スプライト描画)、ライン描画などが可能で、メモリ上に 用意したバックバッファに対する描画も可能です。 擬似乱数の生成には高速で上質な Mersenne Twister を使用しています。

若干の制限はありますが、rvtl は子プロセスの起動、パイプ、リダイレクト といったシェルとしての機能も持っています。 先頭行を #!/usr/bin/rvtl として実行パーミッションを付加するとシェルスクリプトとして使うことも できます。

rvtlの文法や使用法の詳細は付属のドキュメントか、 こちらのページ を参照してください。 比較的規模の大きいプログラムの例は RvtlWiki のソースをご覧下さい。

ARM系のCPU を使っているLinux機ならば機種依存なく使用できるはずです。 64bit 版のArmを搭載したDragonboard 410C でも動作します。

ダウンロード

パッケージ ファイル サイズ 内容
ipk rvtl_3.03.1_arm.ipk 54kB バイナリ、文書、サンプル
tar.gz rvtl-3.03.1arm.tar.gz 134kB +ソース付属 (OABI)
EABI rvtl-arm_3.05.tar.gz 143kB Raspberry Pi(2)、Dragonboard 410C など(2015/10/05)

インストールとアンインストール (Raspberry Pi)

rvtl-arm_3.05.tar.gz を展開したディレクトリで ./rvtl と入力するだけで、 共有ライブラリやカーネルのバージョンに関係なく使用できます。 より便利に使うには、パスの通ったディレクトリに rvtl をコピーすることをお勧めします。 デフォルトではシェルスクリプトとして使う場合を考えて /usr/bin に置くように しています。

    # cp rvtl /usr/bin

rvtl のバイナリをコピーするだけで使うことができます。 あえてアセンブルする場合は、make を実行して下さい。 スーパーユーザで make install すると /usr/bin に rvtl がコピー されます。

rvtl を rvtlw という名で起動すると、rvtlのプログラムが終了(#=-1)したり エラーでrvtl自身が終了します。rvtlw は rvtl で CGI を作成する場合に使うことを想定しています。 シンボリックリンクを次のように作成すると rvtlw で起動できます。

  # cd /usr/bin
  # ln -s rvtl rvtlw

ASLR に対応しました。編集機能が UTF-8 対応になりました。 Linux Zaurus版と同様にフレームバッファを使ったグラフィックス命令を使用できます。 フレームバッファのサンプルは以下のように実行します。

$ cd
$ cd rvtl-arm/vtl
$ rvtl fb_demo.vtl
<02F5> #=1

インストールとアンインストール (玄箱PRO、Raspberry Pi、Dragonboard)

カーネルがEABIとOABIの両方をサポートしている場合は、rvtl-3.03.1arm.tar.gz とrvtl-arm_3.05.tar.gz のどちらも使用できます。EABI専用にコンパイルされて いる場合は、rvtl-arm_3.05.tar.gz を使ってください。最近のArm用 Linux は EABI です。

rvtl を展開したディレクトリで ./rvtl と入力するだけで、共有ライブラリや カーネルのバージョンに関係なく使用できます。より便利に使うには、パスの 通ったディレクトリに rvtl をコピーすることをお勧めします。 デフォルトではシェルスクリプトとして使う場合を考えて /usr/bin に置くように しています。

    # cp rvtl /usr/bin

rvtl はダイナミックリンクしたライブラリを使用していないので、 rvtl のバイナリをコピーするだけで使うことができます。あえてアセンブルする 場合は、 binutils が使用できる環境で make して下さい。 スーパーユーザで make install すると /usr/bin に rvtl がコピー されます。

rvtl を rvtlw という名で起動すると、rvtlのプログラムが終了(#=-1)したり エラーでrvtl自身が終了します。 シンボリックリンクを次のように作成すると rvtlw で起動できます。

  # cd /usr/bin
  # ln -s rvtl rvtlw

インストールとアンインストール (SL Zaurus)

ipk は「ソフトウェアの追加/削除」からインストールして下さい。 インストール先は本体メモリとしてください。 /usr/bin に rvtl、 /home/zaurus/rvtl 以下にドキュメント、/home/zaurus/rvtl/vtl に サンプルプログラムがインストールされます。

rvtl-3.03.1arm.tar.gz(OABI) にはアセンブリソースを同梱しています。 展開したディレクトリにはアセンブル済みの rvtl があります。 ./rvtl と入力するだけで、 共有ライブラリやカーネルのバージョンに関係なく使用できます。 より便利に使うには、パスの通ったディレクトリに rvtl をコピーすることをお勧めします。 デフォルトではシェルスクリプトとして使う場合を考えて /usr/bin に置くようにしています。

    # cp rvtl /usr/bin

あえてアセンブルする場合は、as と ld が使用できる環境(binutilsがインストール済み) で ./asld rvtl としてアセンブルして下さい。

make が使用できる場合は make でアセンブルできます。 スーパーユーザで make install すると /usr/bin に rvtl がコピー されます。

クロスアセンブルする場合は、Makefile を以下のように変更してください。

  # self assemble
  #ARCH=

  # cross assemble
  ARCH=arm-linux-

rvtl のアンインストールは単に rvtl を削除するだけです。 ipk からインストールした場合は「ソフトウェアの追加/削除」から アンインストールできます。

Linux Zaurus版の特徴

コマンドレベルでは i386版 v.3.03PowerPC版 v.3.03.1 と互換です。 PC Linux とはハードウェアの違いでフレームバッファの座標が異なり、 Zaurusを右に90度傾けるとPCと同じ表示になります。(後述)

実行すると SL-C700、750、760 では以下のように表示されます。 プロンプトは「<プロセスIDの16進数表示>」です。

  ~$ rvtl
  RVTL v.3.03.1 2009/03/15, (C)2003-2009 Jun Mizutani
  RVTL may be copied under the terms of the GNU General Public License.

  <02F5> _

SL-B500等やフォントが大きく画面の表示文字数が少ない場合、プロンプトが プロセスIDの16進数表示の下2桁に「>」が付く形式になります。 フォントやコンソールのサイズに合わせて動的に変化します。

  ~$ rvtl
  RVTL v.3.03.1 2009/03/15, (C)2003-2009 Jun Mizutani
  RVTL may be copied under the terms of the GNU General Public License.
  F5> _

SL-B500では記号の入力が大変です。Fn と シフトキーの組み合わせですべての記号が 入力できますが、ソフトウェアキーボードを使うほうが楽かもしれません。 私は SL-B500 ユーザですが、キーボードに記号を書き込んでしまいました。

サンプル

vtl ディレクトリの fb_demo.vtl はフレームバッファを操作する機能の デモです。bmp ファイルをロードするため、vtl ディレクトリに移動した後 に実行してください。フレームバッファを使ったグラフィックのプログラム も高速に実行できます。ターミナル (コンソール) から実行してください。 終了は「~ (チルダ)」です。実行中断は

$ cd
$ cd rvtl/vtl
$ rvtl fb_demo.vtl
<02F5> #=1

フレームバッファのデモが始まると、最初にフレームバッファをメモリに保存します。 次にランダムな色の点を10万個書き出し0.1秒スリープします。 それぞれ1万本の水平と垂直の線、ランダムな線を0.1秒の間隔をおいて描画することを3回繰り返します。 続いてモノクロの bmp ファイルから読み込んだパターン(足跡のつもり)を50msec毎に100個描画します。

frame buffer demo1

左の図は256色の bmp ファイル (ペンギンの頭) を5msecのスリープをはさんで移動しながら 2000回表示します。Linux Zaurusのフレームバッファは左下から左上に X が増加し、 左から右へ Y が増加する構造になっています。


ペンギンの頭が左に90度回転させた形になっていることがわかります。bmp ファイルの読み込み時に 正常な位置に回転させる必要がありますが、今回の例では行っていません。

frame buffer demo2

32x32ビットの正方形を色を変えながら2000回表示しています。その後、 最初に保存したフレームバッファから16x16ビットのパターンを切り出し、画面に転送しています。

1950     u=-1 v=1
1960     x=24 y=0
1970     I=1,2000
1980       !=^Bounce
1990       X=x Y=y C=I/32 C=% C=X*32+(C<<11)+Y
2000       !=^FillPattern
2010       _=Speed/10
2020     @=I+1

上は矩形塗りつぶし部分のコードです。サブルーチン呼び出し先の ^FillPattern の 部分は引数を設定して「|fbr」コマンドを実行しています。

frame buffer demo3

さらに時間が経過したところです。最初に保存したフレームバッファを市松模様状に 画面に転送することで画面を元に戻しています。市松模様状に画面を復帰する部分の コードを示します。「|fbt」コマンドでメモリからフレームバッファに転送しています。 動きの割りに簡単です。

3810      K=0,1
3820        X=g[0]/t[3]-1  Y=g[1]/t[4]-1
3830        I=0,X
3840          J=0,Y
3850            D=(I+J)/2 D=%
3860            ;=D=K #=^RS_skip
3870            t[1]=I*t[3]   : 転送先のX座標
3880            t[2]=J*t[4]   : 転送先のY座標
3890            t[8]=t[1]     : 転送元のX座標
3900            t[9]=t[2]     : 転送元のY座標
3910            |fbt
3920            _=5000
3930            ^RS_skip
3940          @=J+1
3950        @=I+1
3960      @=K+1

rvtlのプログラムは vtl の拡張子が付いたテキストファイルです。 rvtlから読むこともできますが、メモ帳などお気に入りのテキストエディタで 読むほうが楽できます(^_^; fb_demo.vtl と実行時の画面を見比べてください。

ライセンス

このソフトはフリーソフトウェアです. GNU General Pulic Licenceにしたがって 自由に使用,配布,改変して頂いてかまいません。 GNU General Pulic Licence の詳細はCOPYINGを参照して下さい. GNU General Pulic Licence の日本語訳は gpl.text です.

著作権は私(水谷 純, mizutani.jun@nifty.ne.jp)が保有しています。

本ソフトウェアによって生じた損害について著作者は責任を負いません。 また、著作者はバージョンアップの義務を負いません。

このページの目次