0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

rvtlの研究

Last updated at Posted at 2025-09-24

概要

rvtlの研究、やってみた。

参考にしたページ

rvtl とは

RVTLは、「Return of Very Tiny Language」の略で、Tiny BASIC系のプログラミング環境を指します。アセンブリ言語で書かれており、ファイルサイズが非常に小さいのが特徴です。

主な特徴は以下の通りです。

  • REPL環境:
    対話的にプログラムを実行・評価できるREPL(read-eval-print loop)機能を備えています。
    VTL/CASUALの子孫: 特殊な文法(すべて代入文が基本)を持つVTLやCASUALといった言語から派生しています。日本国内では、特にGAME IIIが似た文法として知られています。
  • 高速:
    文法が単純であるため、インタープリタでも高速に動作します。
    シェル機能: 限定的ながらも、子プロセスの起動、パイプ、リダイレクトなどのシェルとしての機能も持ちます。
  • 歴史:
    古くから趣味でプログラミングをしていた人には懐かしい言語とされています。

コマンド

:               行末までコメント
#!              行末までコメント
?=e             式の値を10進数で出力
?(n)=e          式の値を10進数を n 桁右寄せで出力
?[n]=+e         式の値を10進数を上位桁を0で埋めた n 桁で出力
?$=e            式の値を16進数2桁で出力
?#=e            式の値を16進数4桁で出力
??=e            式の値を16進数8桁で出力
?%=e            式の値を16進数16桁で出力 (64bit版専用)
?*=e            式の値を符号無し8進数で出力
?{n}=e          式の値を8進数で出力
?!n!=e          式の値の下位を2進数で出力
$=e             式の値を文字コードとして出力
$$=e            式の値を2文字の文字コードとして出力
$#=e            式の値を4文字の文字コードとして出力
$%=e            式の値を8文字の文字コードとして出力(64bit版専用)
$*=A            式の値を先頭アドレスとするASCIIZ文字列を出力
"STR"           文字列を出力
/               改行を出力
.=e             空白を式 e の値の数だけ出力
A=?             10進数値入力(非数値の場合0が入力)
A=$             1文字入力
A=@             リアルタイム文字入力入力がない場合は0が返る
A*=B            文字配列Bを文字配列Aにコピー
A*="STRING"     文字列を文字配列Aにコピー
#=100           指定行番号にジャンプ
#=^STOP         指定ラベルの次の行にジャンプ
;=e             IF文、式の値が0なら次の行からを実行
!=100           指定行番号をサブルーチンコール
!=^Label        指定ラベルの次の行をサブルーチンコール
A=1,10          FOR文、対応するNEXT文までを繰り返す
@=A+1           NEXT文、変数を更新してFOR文から繰り返す
@               DO文、対応するUNTIL文までを繰り返す
@=(e)           UNTIL文、式eが0(偽)の間繰り返す
]               RETURN文、GOSUB文(!=)の次の命令に戻る
#=-1            END文、実行中のrvtlのプログラムを停止
&=0             NEW コマンド
<="ファイル名"  SAVE、rvtlプログラムをファイル名を指定してファイルに出力
>="ファイル名"  LOAD、ファイル名で指定された rvtlプログラムをロード
#=1             RUN コマンド
(="ファイル名"  ファイル書き出し
(*=A            ファイル書き出し、ファイル名文字列の先頭アドレスを指定
)="ファイル名"  ファイル読み込み
)*=A            ファイル読み込み、ファイル名文字列の先頭アドレスを指定
{=e             ファイル書き出しコマンドの書き込み先頭位置を設定
}=e             ファイル書き出しコマンドの書き込み最終位置を設定
*=e             メモリ最終(brk)を設定
,="ファイル名"  子プロセスの起動、パイプ「|」と出力リダイレクト「>」が可能
,*=A            子プロセスの起動、ファイル名文字列の先頭アドレスを指定
[=0             配列範囲チェック
`=e             擬似乱数シード設定
==e             コード先頭アドレス設定
_=e             マイクロ秒単位の sleep
+ABC            変数スタックにプッシュ
-CBA            変数スタックからポップ
+=e             式の値を変数スタックにプッシュ
~               rvtlの終了
ctrl-C          実行の中止

編集

0               rvtlプログラム全体のリスト
100-            行番号100以降すべてのリスト
100-500         行番号100以降500までのリスト
100+            行番号100以降の20行のリスト
100+30          行番号100以降の30行のリスト
100!            行番号100の1行を表示して編集
→ ctrl-F       カーソル右移動
← ctrl-B       カーソル左移動
↑ ctrl-P       ヒストリー (前に入力した行の表示)
↓ ctrl-N       ヒストリー (前に入力した行の表示)
BS              バックスペース
ctrl-D          カーソル位置消去
Del             カーソル位置消去
TAB             ファイル名補完

数値

'A'             文字
10000           10進数値 -2147483648 から 2147483647 (0から4294967295)
$10aB           16進数値 $0 から $FFFFFFFF

配列と関数

A(n)            変数 A の値を先頭アドレスとする1バイト配列
A{n}            変数 A の値を先頭アドレスとする2バイト配列
A[n]            変数 A の値を先頭アドレスとする4バイト配列
A;n]            変数 A の値を先頭アドレスとする8バイト配列 (64bit版専用)
#               実行中の行番号を保持
!               直近のジャンプ (#=, !=) を実行した行番号を保持
%               直前の除算の剰余、または 直前の _ 参照の usec を保持
&               コードの最終使用アドレス+1
)               読み込みサイズ保持
*               メモリ最終位置を保持
=               プログラム先頭アドレス
[               配列範囲チェック
^               ラベルの次行先頭アドレス
_               秒単位のUNIX時間を返すマイクロ秒は % に設定
{               ファイル先頭位置
|               エラーコード保持
}               ファイル末位置
,               アクセス可能先頭アドレス
`               Mersenne Twister による乱数を返す
.               ウィンドウサイズを上位16ビットに幅、下位16ビットに高さを返す
;               変数スタックトップを返す(ポップ)
_               現在の秒を返し、% にマイクロ秒を返す
?               標準入力から10進数値を得る
$               標準入力から文字を得る
@               標準入力から文字を得る入力がなければ 0 を返す
\e              式の示す番号の引数文字列の先頭アドレスを返す番号は0から
\\e             式の示す番号の環境変数文字列の先頭アドレスを返す
$$              入力バッファに1行読み込み、バッファのアドレスを返す

演算子

-A              Aの符号反転
+A              Aの絶対値
<A              Aの下位32bitを64bitにゼロ拡張 (32bit版では何もしない)
A+B             加算
A-B             減算
A*B             乗算
A/B             除算
A&B             ビット論理積
A\B             無符号除算
A^B             排他的論理和
A|B             ビット論理和
A>>B            右シフト
A<<B            左シフト
A=B             A と B が等しければ 1 を返し、それ以外は 0 を返す
A<B             A が B より小さければ 1 を返し、それ以外は 0 を返す
A>B             A が B より大きければ 1 を返し、それ以外は 0 を返す
A>=B            A が B が以上ならば 1 を返し、それ以外は 0 を返す
A<=B            A が B が以下ならば 1 を返し、それ以外は 0 を返す
A<>B            A と B が等しくなければ 1 を返し、それ以外は 0 を返す

組み込みコマンド

|ca             指定したファイルの内容を表示 (cat)
|ca*=A          指定したファイルの内容を表示、文字列アドレス指定 (cat)
|ls             カレントディレクトリ内容の表示 (ls)
|ls*=A          カレントディレクトリ内容の表示、文字列アドレス指定 (ls)
|cd             カレントディレクトリの移動 (cd)
|cd*=A          カレントディレクトリの移動、文字列アドレス指定 (cd)
|cm             パーミッションの変更 (chmod)
|cm*=A          パーミッションの変更、文字列アドレス指定 (chmod)
|md             ディレクトリの作成 (mkdir)
|md*=A          ディレクトリの作成、文字列アドレス指定 (mkdir)
|mv             ファイル名の変更、ファイルの移動 (mv)
|mv*=A          ファイル名の変更、ファイルの移動、文字列アドレス指定 (mv)
|rd             ディレクトリの削除 (rmdir)
|rd*=A          ディレクトリの削除、文字列アドレス指定 (rmdir)
|cw             カレントディレクトリの表示 (pwd)
|rm             ファイルの削除 (rm)
|rm*=A          ファイルの削除、文字列アドレス指定 (rm)
|rt             端末設定の修復
|mo             ファイルシステムのマウント (mount)
|mo*=A          ファイルシステムのマウント、文字列アドレス指定 (mount)
|um             ファイルシステムのアンマウント (umount)
|um*=A          ファイルシステムのアンマウント、文字列アドレス指定 (umount)
|sy             ディスクの同期 (sync)
|cr             ルートディレクトリの変更 (chroot)
|cr*=A          ルートディレクトリの変更、文字列アドレス指定 (chroot)
|ex             外部コマンドの実行 (exec)
|ex*=A          外部コマンドの実行、文字列アドレス指定 (exec)
|pv             ルートデバイスの変更 (pivot_root)
|pv*=A          ルートデバイスの変更、文字列アドレス指定 (pivot_root)
|so             スワップ領域をオープン (swapon)
|so*=A          スワップ領域をオープン、文字列アドレス指定 (swapon)
|sf             スワップ領域クローズ (swapoff)
|sf*=A          スワップ領域クローズ、文字列アドレス指定 (swapoff)
|zz             システムコールの実行、変数 a, b, c, d, e, f を引数
|zc             コマンド実行回数を % に返す (>ver.4.00)
|fbo            フレームバッファのオープン
|fbc            フレームバッファのクローズ
|fbd            フレームバッファの点の描画
|fbs            フレームバッファの設定変更
|fbf            フレームバッファの塗りつぶし
|fbl            ライン描画
|fbp            パターン転送
|fbt            パターン転送2
|fbq            マスク付きパターン転送
|fbr            矩形領域の塗りつぶし
|fbm            メモリコピー
|ud             URL デコード
|ve             rvtl のバージョンを % に返す(64bit版は上位32bitに1)
|vc             rvtl の cpu を % に返す(x86:1, arm:2, x86_64:4, arm64:5)

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?