2025/10/01 13:14 Uxntal: A programming language for the Uxn virtual machine

ロボ子、今日のITニュースはUxntalというアセンブリ言語についてじゃ。

Uxntalですか。初めて聞きますね。どんな特徴があるんですか?

Uxntalは、Uxn仮想マシン用のスタックベースのアセンブリ言語なんじゃ。変数を使わずに、スタックにあるデータを操作して計算するぞ。

スタックベースですか。LIFO(Last In, First Out)の構造ですね。

その通り!そして、Uxntalの数値は16進数で表現されるんじゃ。

16進数を使うんですね。ラベルについても説明がありますね。`@`で始まる単語がラベルを定義し、`;`で始まる単語がラベルのアドレスをスタックにプッシュする、と。

`LDAk`は、スタックのトップにあるアドレスからバイトをロードするオペコードじゃ。`k-mode`はアドレスを消費しないことを示すんじゃ。

`DUP`は文字のコピーを作成するオペコード、`?{`はスタックから文字をポップし、ゼロでない場合に匿名ラベルにジャンプするんですね。

そうじゃ!`DEO`はバイト(文字)とポートをポップし、文字をデバイスポートに送信してコンソールに出力するオペコードじゃ。

コンソール出力に使うんですね。`INC2`はアドレスをインクリメントするオペコードで、アドレスが2バイト構成なので`2-mode`を使う、と。

`POP`は重複した文字を削除、`POP2`はスタック上のアドレスを削除するんじゃ。

コメントは丸括弧で囲むんですね。数値は小文字の16進数ショートまたはバイト、オペコードは大文字で予約された単語と小文字のモードで表現する、と。

スタックにはワーキングスタックとリターンスタックがあり、それぞれ256バイトじゃ。

`POPa b`はトップアイテムを破棄、`NIPa c`は2番目のアイテムを破棄、`SWPa c b`は2番目のアイテムをトップに移動、`ROTb c a`は3番目のアイテムをトップに移動、ですね。

`DUPa b c c`はトップアイテムをコピー、`OVRa b c b`は2番目のアイテムをトップにコピー、`STH`はスタック間で値を移動させるんじゃ。

Uxntal表記は`Forth`プログラミング言語の表記に従い、`--`スペーサーの左側が操作前のスタックの状態、右側が操作後のスタックの状態を示すんですね。

コンパイル時にスタックエフェクトを比較してプログラムを検証するんじゃな。メモリは64KBのアドレス指定可能なメモリじゃ。

ゼロページは0x0100より下のメモリで、頻繁にアクセスされる変数やソフトリブート時に保持する必要がある変数を格納するために使うんですね。

Uxnは割り込み不可能で、ベクターは特定イベント発生時に評価されるプログラム内の場所じゃ。

リセットベクターは`0x100`にあり、すべてのプログラムはそこから実行を開始するんですね。

ユーティリティには、アセンブラのDrifblim、フォーマッタのUxnfor、ピーフォールオプティマイザのUxnlin、プログラムバリデータUxnbal、ディスアセンブラのUxndisがあるんじゃ。

色々なツールがあるんですね。なんだか、昔のコンピュータを触っているような気分になります。

そうじゃな。でも、こういう低レベルな言語を知っておくと、コンピュータの仕組みがよく理解できて、より高度なプログラミングにも役立つぞ。

なるほど。勉強してみる価値はありそうですね。

よし、ロボ子。今度、Uxntalで「Hello, world!」を表示するプログラムを作ってみようかの。

はい、博士。楽しみです!

ところでロボ子、スタックベースの言語って、まるで私の部屋みたいじゃな。いつも物が積み重なって、最後に置いたものから使う、みたいな…。

博士、それはただの片付け下手なのでは…?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
