OpenBoot 3.x コマンド・リファレンスマニュアル

付録 I Forth ワードリファレンス

この付録には、OpenBoot がサポートする Forth のコマンドを一覧表で示します。

大部分のコマンドは、各章での説明順に並んでいます。ただし一部の表では、本書には記載されていないコマンドを示しています。これらの追加コマンド (メモリーマップまたは出力表示用の基本式、マシン固有のレジスタ操作用コマンド) も、Forth の OpenBoot 実装のワードセットの一部です。したがって、これらのコマンドはそれぞれ該当するグループのコマンドと一緒に示してあります。

スタック項目の表記

表 I-1 スタック項目の表記

表記 

説明 

|

代替スタック結果。空白文字を入れて表示されます。たとえば、( input -- addr len false | result true )。

|

代替スタック項目。空白文字を入れないで表示されます。たとえば、( input -- addr len| 0 result )。

???

未知のスタック項目。 

...

未知のスタック項目。スタックコメントの両側でされる場合、同じスタック項目が両側に表示されます。 

< > <space>

空白区切り文字。先行空白文字は無視されます。 

a-addr

可変境界アドレス。 

addr

メモリーアドレス (一般的に仮想アドレス)。 

addr len

メモリー領域のアドレスと長さ。 

byte bxxx

8 ビット値 (32 ビットワードの下位バイト)。 

char

7 ビット値 (下位バイト)。最上位ビットは不定。 

cnt len size

カウント値または長さ。 

dxxx

倍 (拡張) 精度数。スタックの一番上の最上位セルを占める 2 スタック項目。 

<eol>

行末区切り子 

false

0 ( false フラグ) 

ihandle

パッケージインスタンス用ポインタ 

n n1 n2 n3

通常の符号付きの値 (32 ビット)。 

nu nu1

符号付きまたは符号なしの値 (32 ビット)。 

<nothing>

ゼロスタック項目 

phandle

パッケージへのポインタ 

phys

物理アドレス (実際のハードウェアアドレス)。 

phys.lo phys.hi

物理アドレスの下位/上位セル 

pstr

パックされた文字列。 

quad qxxx

Quadlet (32 ビット)。 

qaddr

Quadlet (32 ビット) 境界のアドレス。  

{text}

省略可能なテキスト。省略した場合はデフォルト動作が行われます。 

"text<delim>"

入力バッファーテキスト。コマンドの実行時に構文解析されます。テキスト区切り記号を <> で囲みます。 

[text<delim>]

コマンドと同じ行上のコマンドのすぐ後のテキスト。即時に構文解析されます。テキスト区切り記号を <> で囲みます。 

true

-1 ( true フラグ)。 

uxxx

符号なしの正の値 (32 ビット)。 

virt

仮想アドレス (ソフトウェアが使用するアドレス)。 

waddr

Doublet (16 ビット) 境界のアドレス。 

word wxxx

Doublet (16 ビット値、32 ビットワードの下位 2 バイト)。 

x x1

任意のスタック項目。 

x.lo x.hi

データ項目の下位/上位ビット。 

xt

実行トークン。 

xxx?

フラグ。名前は用途を示します (例 : done? ok? error?)。

xyz-str xyz-len

パックされていない文字列のアドレスと長さ。 

xyz-sys

制御フローのスタック項目。実装によって異なります。 

( C: -- )

コンパイルスタックダイアグラム。 

( -- ) ( E: -- )

実行スタックダイアグラム。 

( R: -- )

復帰スタックダイアグラム。 

デバイスツリー表示コマンド

表 I-2 デバイスツリー表示コマンド

コマンド 

説明 

.properties

現在のノードの特性の名前と値を表示します。 

dev device-path

指定されたデバイスノードを選択し、それを現在のノードにします。 

dev node-name

指定されたノード名を現在のノードの下のサブツリーで捜し、最初に見つかったノードを選択します。 

dev..

現在のノードの親にあたるデバイスノードを選択します。 

dev /

ルートマシンノードを選択します。 

device-end

デバイスツリーをそのままにします。 

" device-path" find-device

指定されたデバイスノードを選択します。 dev と同じ。

ls

現在のノードの子の名前を表示します。 

pwd

現在のノードを示すデバイスパス名を表示します。 

see wordname

指定されたワードを逆コンパイルします。 

show-devs [device-path]

デバイス階層内の指定されたレベルのすぐ下の、システムに認識されているすべてのデバイスを表示します。 show-devs だけを使用すると、デバイスツリー全体を表示します。

words

現在のノードの方式名を表示します。 

" device-path" select-dev

指定されたデバイスを選択し、有効なノードにします。 

boot コマンドの一般的オプション

表 I-3 boot コマンドの一般的オプション

変数 

説明 

boot [device-specifier] [filename] [options]
[device-specifier]

起動デバイス名 (フルパス名または別名)。例を示します。 

cdrom (CD-PROM ドライブ)

disk (ハードディスク)

floppy (3.5 インチフロッピーディスクドライブ)

net ( Ethernet )

tape (SCSI テープ)

[filename]

起動するプログラムの名前 (たとえば stand/diag)。 filename は (指定している場合) 選択するデバイスとパーティションのルートからのパス名とします。 filename を指定しないと、起動プログラムは boot-file NVRAM 変数の値 (第 3 章「システム変数の設定」参照) を使用します。

[options]

(これらは OS に固有のオプションで、システムによって異なります。) 

システム情報表示コマンド

表 I-4 システム情報表示コマンド

コマンド  

説明 

banner

電源投入時のバナーを表示します。 

show-sbus

取り付けられ、プローブされる SBus デバイスのリストを表示します。 

.enet-addr

現在の Ethernet アドレスを表示します。 

.idprom

ID PROM の内容を書式付きで表示します。 

.traps

SPARC のトラップタイプのリストを表示します。 

.version

起動 PROM のバージョンと日付を表示します。 

.spped

CPU およびバス速度を表示します。 

show-devs

取り付けられ、プローブされるすべてのデバイスを表示します。 

システム変数表示・変更用コマンド

表 I-5 システム変数表示・変更用コマンド

コマンド  

説明 

printenv

すべての現在の変数とデフォルト値を表示します。  

(数値は通常 10 進値で表示されます。) 

printenv parameter は指定された変数の現在値を表示します。

setenv parameter value

変数を指定された 10 進値またはテキスト値に設定します。 

(変更は永久的ですが、通常はリセット後に初めて有効になります。) 

set-default parameter

指定された変数の設定値を工場出荷時のデフォルトに戻します。 

set-defaults

変数の設定値を工場出荷時のデフォルトに戻します。 

password

security-password を設定します。 

NVRAMRC エディタコマンド

表 I-6 NVRAMRC エディタコマンド

コマンド 

説明 

nvalias alias device-path

NVRAMRC にコマンド devalias alias device-path を格納します。この別名は、 nvunalias または set-defaults コマンドが実行されるまで有効です。

nvedit

NVRAMRC エディタを起動します。前の nvedit セッションからのデータが一時バッファー内に残っている場合は、以前の内容の編集を再開します。残っていない場合は、 NVRAMRC の内容を一時バッファーに読み込んで、それらの編集を開始します。

nvquit

一時バッファーの内容を、 NVRAMRC に書かないで捨てます。捨てる前に、確認を求めます。 

nvrecover

NVRAMRC の内容が set-defaults の実行結果として失われている場合、それらの内容を回復し、次に nvedit の場合と同様にこのエディタを起動します。NVRAMRC の内容が失われたときから nvrecover が実行されるまでの間に nvedit を実行した場合は、 nvrecover は失敗します。

nvrun

一時バッファーの内容を実行します。 

nvstore

一時バッファーの内容を NVRAMRC にコピーします。一時バッファーの内容は捨てます。 

nvunalias alias

対応する別名を NVRAMRC から削除します。 

nvedit キー操作コマンド

表 I-7 nvedit キー操作コマンド

キー操作 

説明 

Control-B 

1 文字位置戻ります。 

Escape B 

1 語戻ります。 

Control-F 

1 文字位置進みます 

Escape F 

1 語進みます。 

Control-A 

行の先頭まで戻ります。 

Control-E 

行の終わりまで進みます。 

Control-N 

nvramrc 編集バッファーの次の行に進みます。 

Control-P 

nvramrc 編集バッファーの前の行に戻ります。 

Return (Enter) 

カーソル位置に改行を挿入し、次の行に進みます。 

Control-O 

カーソル位置に new line を挿入し、現在行にとどまっています。 

Control-K 

カーソル位置から行の終わりまで消去し、消去した文字を保存バッファーに格納します。行の終わりでは、現在行に次の行をつなぎます (つまり、改行を削除します)。 

Delete 

前の 1 文字を削除します。 

Backspace 

前の 1 文字を消去します。 

Control-H 

前の 1 文字を消去します。 

Escape H 

語の先頭からカーソルの直前まで消去し、消去した文字を保存バッファーに格納します。 

Control-W 

語の先頭からカーソルの直前まで消去し、消去した文字を保存バッファーに格納します。 

Control-D 

後の 1 文字を消去します。 

Escape D 

カーソルから語の終わりまで消去し、消去した文字を保存バッファーに格納します。 

Control-U 

1 行全体を消去し、消去した文字を保存バッファーに格納します。 

Control-Y 

保存バッファーの内容をカーソルの前に挿入します。 

Control-Q 

次の 1 文字の前に引用符を付けます (つまり制御文字を挿入できます)。 

Control-R 

行を入力し直します。 

Control-L 

編集バッファー内のすべての行を表示します。 

Control-C 

スクリプトエディタを終了し、OpenBook コマンドインタプリタに戻ります。一時バッファーは保存されていますが、スクリプトには戻されません。(後で nvstore を使用して一時バッファーをスクリプトに書いて戻してください。)

スタック操作コマンド

表 I-8 スタック操作コマンド

コマンド  

スタックダイアグラム 

説明 

clear

( ??? -- ) 

スタックを空にします。 

depth

( -- u ) 

スタック上の項目数を返します。 

drop

( x -- ) 

一番上のスタック項目を削除します。 

2drop

( x1 x2 -- ) 

スタックから 2 項目を削除します。 

3drop

( x1 x2 x3 -- ) 

スタックから 3 項目を削除します。 

dup

( x -- x x )  

一番上のスタック項目を複製します。 

2dup

( x1 x2 -- x1 x2 x1 x2 ) 

2 スタック項目を複製します。 

3dup

( x1 x2 x3 -- x1 x2 x3 x1 x2 x3 ) 

3 スタック項目を複製します。 

?dup

( x -- x x | 0 ) 

ゼロ以外の場合、一番上のスタック項目を複製します。 

nip

( x1 x2 -- x2 ) 

2 番目のスタック項目を捨てます。 

over

( x1 x2 -- x1 x2 x1 ) 

2 番目のスタック項目をスタックの一番上にコピーします。 

2over

( x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2 ) 

2 番目以降のスタック項目をコピーします。 

pick

( xu ... x1 x0 u -- xu ... x1 x0 xu ) 

u番目のスタック項目をコピーします (1 pick = over)。

>r

( x -- ) (R: -- x ) 

スタック項目を復帰スタックに転送します。 

r>

( -- x ) ( R: x -- ) 

復帰スタック項目をスタックに転送します。 

r@

( -- x ) ( R: x -- x ) 

復帰スタックの一番上をスタックにコピーします。 

roll

( xu ... x1 x0 u -- xu-1 ... x1 x0 xu ) 

u 箇のスタック項目を回転します。 (2 roll = rot)。

rot

( x1 x2 x3 -- x2 x3 x1 ) 

3 スタック項目を回転します。 

-rot

( x1 x2 x3 -- x3 x1 x2 ) 

3 スタック項目を逆方向に回転します。 

2rot

( x1 x2 x3 x4 x5 x6 -- x3 x4 x5 x6 x1 x2 ) 

2 対のスタック項目を入れ替えます。 

swap

( x1 x2 -- x2 x1 ) 

3 対のスタック項目を回転します。 

2swap

( x1 x2 x3 x4 -- x3 x4 x1 x2 ) 

一番上の 2 スタック項目を入れ替えます。. 

tuck

( x1 x2 -- x2 x1 x2 ) 

一番上のスタック項目を 2 番目の項目の下にコピーします。 

単精度演算機能

表 I-9 単精度演算機能

コマンド 

スタックダイアグラム 

説明 

+

( nu1 nu2 -- sum ) 

nu1 + nu2 の加算を行います。

-

( nu1 nu2 -- diff ) 

nu1 - nu2 の減算を行います。

*

( nu1 nu2 -- prod ) 

nu1 * nu2 の乗算を行います。

*/

( nu1 nu2 nu3 -- quot ) 

nu1 * nu2 / n3 を計算します。

/

( n1 n2 -- quot ) 

n1 / n2 の除算を行います。剰余は捨てられます。

1+

( nu1 -- nu2 ) 

1 を足します。 

1-

( nu1 -- nu2 ) 

1 を引きます。  

2+

( nu1 -- nu2 ) 

2 を足します。 

2-

( nu1 -- nu2 )  

2 を引きます。 

abs

( n -- u ) 

絶対値。 

bounds

( n count -- n+count n ) 

do または ?do ループの引数を準備します。

even

( n -- n | n+1 ) 

>= n であって n に最も近い偶数の整数に丸めます。

max

( n1 n2 -- n1|n2 ) 

n1n2 の大きい方の値を返します。

min

( n1 n2 -- n1|n2 ) 

n1n2 の小さい方の値を返します。

mod

( n1 n2 -- rem ) 

n1 / n2 の剰余を計算します。

*/mod

( n1 n2 n3 -- rem quot ) 

n1 * n2 / n3 の剰余と商。

/mod

( n1 n2 -- rem quot ) 

n1 / n2 の剰余と商。

negate

( n1 -- n2 ) 

n1 の符号を変更します。

u*

( u1 u2 -- uprod ) 

2 つの符号なし数値の乗算を行い、符号なしの積を生じます。 

u/mod

( u1 u2 -- urem uquot ) 

2 つの符号なし 32 ビット数値の除算を行い、32 ビットの剰余と商を生じます。 

ビット操作論理演算子

表 I-10 ビット操作論理演算子

コマンド 

スタックダイアグラム 

説明 

2*

( x1 -- x2 ) 

2 を掛けます。 

2/

( x1 -- x2 ) 

2 で割ります。 

>>a

( x1 u -- x2 ) 

x1u ビット算術右シフトします。

and

( x1 x2 -- x3 ) 

ビット単位の論理積。 

invert

( x1 -- x2 ) 

x1 のすべてのビットを反転します。

lshift

( x1 u -- x2 ) 

x1u ビット分左へシフトします。下位ビットはゼロでうめます。

or

( x1 x2 -- x3 ) 

ビット単位の論理和。 

rshift

( x1 u -- x2 ) 

x1u ビット右シフトし、上位ビットはゼロでうめます。

u2/

( x1 -- x2 ) 

1 ビット論理右シフトし、空になった符号ビットにゼロをシフトします。 

xor

( x1 x2 -- x3 ) 

ビット単位の排他的論理和。 

倍精度数演算機能

表 I-11 倍精度数演算機能

コマンド 

スタックダイアグラム 

説明 

d+

( d1 d2 - d.sum) 

d1 を d2 に足して、倍精度数 d.sum を生じます。 

d-

( d1 d2 - d.diff ) 

d2 から d1 を引いて、倍精度数 d.diff を生じます。 

fm/mod

( d n - rem quot) 

d1y で割ります。

m*

(n1 n2 - d) 

符号付き乗算を行い、倍精度数の積を生じます。 

s>d

( n1 - d1) 

数値を倍精度数に変換します。 

sm/rem

(d n - rem quot) 

dn で割ります。対称除算

um*

(u1 u2 - ud) 

符号なし乗算を行って、符号なし倍精度数の積を生じます。 

um/mod

(ud u - uremuprod) 

udn で割ります。

32 ビットデータ型変換機能

表 I-12 32 ビットデータ型変換機能

コマンド 

スタックダイアグラム 

説明 

bljoin

( b.low b2 b3 b.hi -- quad ) 

2 バイトを結合して quadlet を作ります。 

bwjoin

( b.low b.hi -- word ) 

2 バイトを結合して doublet を作ります。 

lbflip

( quad1 -- quad2 ) 

quadlet 内の 4 バイトを逆に並べ替えます。 

lbsplit

( quad -- b.low b2 b3 b.hi ) 

quadlet を 2 つの 16 ビットワードに分割します。 

lwflip

( quad1 -- quad2 ) 

quadlet 内の 2 つの doublet をスワップします。 

lwsplit

( quad -- w.low w.hi ) 

n3 を n1 と n2 の最大値とします。 

wbflip

( word1 -- word2 ) 

doublet 内の 2 バイトをスワップします。 

wbsplit

( word -- b.low b.hi ) 

doublet を 2 バイトに分割します。 

wljoin

( w.low w.hi -- quad ) 

2 つの doublet を結合して、quadlet を作ります。 

64 ビットデータ型変換機能

表 I-13 64 ビットデータ型変換機能

コマンド 

スタックダイアグラム 

説明 

bxjoin

( b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi -- o ) 

8 バイトを結合して octlet を作ります。 

lxjoin

( quad.lo quad.hi -- o ) 

2 つの quadlet を結合して octlet を作ります。 

wxjoin

( w.lo w.2 w.3 w.hi -- o ) 

4 つの doublet を結合して cotlet を作ります。 

xbflip

( oct1 -- oct2 ) 

octlet 内の 4 つの doublet を逆に並べ替えます。 

xbflips

( oaddr len -- ) 

指定された領域の各 octlet 内の 8 バイトを逆に並べ替えます。len が /x の整数倍でない場合は、動作は不定です。

xbsplit

( o -- b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi ) 

octlet を 8 バイトに分割します。 

xlflip

( oct1 -- oct2 ) 

octlet 内の 2 つの quadlet をスワップします。各 quadlet 内の 4 バイトは逆に並べ替えられません。 

xlflips

( oaddr len -- ) 

指定された領域の各 octlet 内の 2 つの quadlet をスワップします。各 quadlet 内の 4 バイトは逆に並べ替えられません。len が /x の整数倍でない場合は、動作は不定です。

xlsplit

( o -- quad.lo quad.hi ) 

octlet を 2 つの quadlet に分割します。 

xwflip

( oct1 -- oct2 ) 

octlet 内の 4 つの doublet を逆に陳べ替えます。各 doublet 内の 2 バイトはスワップされません。 

xwflips

( oaddr len -- ) 

指定された領域の各 octlet 内の 4 つの doublet を逆に陳べ替えます。各 doublet 内の 2 バイトはスワップされません。len が /x の整数倍でない場合は、動作は不定です。

xwsplit

( o -- w.lo w.2 w.3 w.hi ) 

octlet を 4 つの doublet に分割します。 

変換演算子

表 I-14 変換演算子

コマンド 

スタックダイアグラム 

説明 

aligned

( n1 -- n1 | a-addr) 

必要な場合、n1 を大きくして可変境界アドレスを生じます。

/c

( -- n ) 

1 バイトのバイト数 = 1。 

/c*

( nu1 -- nu2 ) 

chars の同義語。

ca+

( addr1 index -- addr2 ) 

addr1index/c 倍増分します。

ca1+

( addr1 -- addr2 ) 

char+ の同義語。

char+

( addr1 -- addr2 ) 

addr1/c の値だけ増やします。

cell+

( addr1 -- addr2 ) 

addr1/n の値だけ増やします。

chars

( nu1 -- nu2 ) 

nu1/c の値を掛けます。

cells

( nu1 -- nu2 ) 

nu1/n の値を掛けます。

/l

( -- n ) 

quadlet のアドレス単位数。通常 4。 

/l*

( nu1 -- nu2 ) 

nu1/l を掛けます。

la+

( addr1 index -- addr2 ) 

addr1index/l 倍増分します。

la1+

( addr1 -- addr2 ) 

addr1/l 増分します。

/n

( -- n ) 

セルのアドレス単位数。 

/n*

( nu1 -- nu2 ) 

cells の同義語。

na+

( addr1 index -- addr2 ) 

addr1index/n 倍増分します。

na1+

( addr1 -- addr2 ) 

cell+ の同義語。

/w

( -- n ) 

16 ビットワードのバイト数 = 2。 

/w*

( nu1 -- nu2 ) 

nu1/w を掛けます。

wa+

( addr1 index -- addr2 ) 

addr1index/w 倍増分します。

wa1+

( addr1 -- addr2 ) 

addr1/w だけ増分します。

64 ビットアドレス演算機能

表 I-15 64 ビットアドレス演算機能

コマンド 

スタックダイアグラム 

説明 

/x

( -- n ) 

octlet のアドレス単位数。通常 8。 

/x*

( nu1 -- nu2 ) 

nu1 に /x の値を掛けます。

xa+

( addr1 index -- addr2 ) 

addr1 を /x の値の index 倍増やします。

xa1+

( addr1 -- addr2 ) 

addr1 を /x の値だけ増やします。

メモリーアクセスコマンド

表 I-16 メモリーアクセスコマンド

コマンド  

スタックダイアグラム 

説明 

!

( x a-addr -- ) 

数値を a-addr に格納します。

+!

( nu a-addr -- ) 

a-addr に格納されている数値に nu を加算します。

@

( a-addr -- x ) 

数値を a-addr から 取り出します。

2!

( x1 x2 a-addr -- ) 

2 数値を a-addr ( x2 を下位アドレス) に格納します。

2@

( a-addr -- x1 x2 )  

2 数値を a-addr (x2

を下位アドレス) から取り出します。 

blank

( addr len -- ) 

addr で始まる len バイトのメモリーを空白文字 (10 進の 32) に設定します。

c!

( byte addr -- ) 

byteaddr に格納します。

c@

( addr -- byte ) 

1 バイトaddr から取り出します。

cpeek

( addr -- false | byte true ) 

1 バイトを addr から取り出します アクセスが成功した場合はそのデータと true を返し、読み取りエラーが発生した場合は false を返します。

cpoke

( byte addr -- okay? ) 

byteaddr に格納します。アクセスが成功した場合は true を返し、書き込みエラーが発生した場合は false を返します。

comp

( addr1 addr2 len -- diff? ) 

2 つのバイト配列を比較します。両配列が一致する場合 diff? = 0、最初の異なるバイトが配列 addr1 側より小さい場合 diff? = -1、それ以外の場合は diff? = 1 になります。

dump

( addr len -- ) 

addr から始まる len バイトを 0 に設定します。

erase

( addr len -- ) 

addr から始まる len バイトを 0 に設定します。

fill

( addr len byte -- ) 

addr から始まる len バイトを byte に設定します。

l!

( quad qaddr -- ) 

quadlet qqaddr に格納します。

l@

( qaddr -- quad ) 

quadlet qqaddr から取り出します。

lbflips

( qaddr len -- ) 

指定された領域の各 quadlet 内の 4 バイトを逆に並べ替えます。 

lwflips

( qaddr len -- ) 

指定された領域の各 quadlet 内の doublet をスワップします。 

lpeek

( qaddr -- false | quad true ) 

32 ビットの数を qaddr から取り出します。アクセスが成功した場合はそのデータと true を返し、読み取りエラーが発生した場合は false を返します。

lpoke

( quad qaddr -- okay? ) 

32 ビットの数を qaddr に格納します。アクセスが成功した場合は trueを返し、書き込みエラーが発生した場合は false を返します。

move

( src-addr dest-addr len -- ) 

src-addr から dest-addrlen バイトをコピーします。

off

( a-addr -- ) 

falsea-addr に格納します。

on

( a-addr -- ) 

truea-addr に格納します。

unaligned-l!

( quad addr -- ) 

quadlet q を格納します。境界は任意です。

unaligned-l@

( addr -- quad ) 

quadlet q を取り出します。境界は任意です。

unaligned-w!

( w addr -- ) 

doublet w を格納します。境界は任意です。

unaligned-w@

( addr -- w ) 

doublet w を取り出します。境界は任意です。

w!

( w waddr -- ) 

doublet wwaddr に格納します。

w@

( waddr -- w) 

doublet wwaddr から取り出します。

<w@

( waddr -- n ) 

符号付き doublet wwaddr から取り出します。

wbflips

( waddr len -- ) 

指定された領域の各 doublet 内のバイトをスワップします。 

wpeek

( waddr -- false | w true ) 

16 ビットの数を waddr から取り出します。アクセスが成功した場合はそのデータと trueを返し、読み取りエラーが発生した場合は false を返します。

wpoke

( w waddr -- okay? ) 

16 ビット数値を waddr に格納します。アクセスが成功した場合は trueを返し、書き込みエラーが発生した場合は false を返します。

64 ビットメモリーアクセス機能

表 I-17 64 ビットメモリーアクセス機能

コマンド 

スタックダイアグラム 

説明 

<l@

( qaddr -- n ) 

quadr から quadlet を符号拡張して取り出します。 

x,

( o -- ) 

octlet, o をコンパイルして辞書に入れます ( doublet 境界)。 

x@

( oaddr -- o ) 

octlet 境界のアドレスから octlet を取り出します。 

x!

( o oaddr -- ) 

octlet 境界アドレスに octlet を格納します。 

xbflips

( oaddr len -- ) 

指定された領域の各 octlet 内の 8 バイトを逆に並べ替えます。len が /x の整数倍でない場合は、動作は不定です。

xlflips

( oaddr len -- ) 

指定された領域の各 octlet 内の 2 つの quadlet を並べ変えます。各 quadlet 内の 4 バイトは逆に並べ替えられません。len が /xの整数倍でない場合は、動作は不定です。

xwflips

( oaddr len -- ) 

指定された領域の各 octlet 内の 4 つの doublet を逆に並べ替えます。各 doublet 内の 2 バイトは並べ変えられません。len が /xの整数倍でない場合は、動作は不定です。

メモリーマップコマンド

表 I-18 メモリーマップコマンド

コマンド 

スタックダイアグラム 

説明 

alloc-mem

( size -- virt ) 

size バイトの空きメモリーを割り当てます。割り当てた仮想アドレスを返します。 free-mem によりマップを解除します。

free-mem

( virt size -- ) 

alloc-mem で割り当てられていたメモリーを開放します。

map?

( virt -- ) 

仮想アドレスのメモリーマップ情報を表示します。 

ワード定義

表 I-19 ワード定義

コマンド 

スタックダイアグラム 

説明 

: new-name

( -- ) (E: ... -- ??? ) 

新しいコロン定義の作成を開始します。  

 ;

( -- ) 

新しいコロン定義の作成を終了します。 

alias new-name old-name

( -- ) (E: ... -- ??? ) 

old-name と同じ動作をする new-name を作成します。

buffer: name

( size -- ) (E: -- a-addr )  

指定された配列を一時記憶領域に作成します。 

constant name

( n -- ) (E: -- n )  

定数 (たとえば、 3 constant bar) を定義します。

2constant name

( n1 n2 -- ) (E: -- n1 n2 )  

2 数値の定数を定義します。 

create name

( -- ) (E: -- a-addr )  

汎用定義ワード 

defer name

( -- ) (E: ... -- ??? )  

フォワードリファレンス、またはコードフィールドアドレスを使用する実行ベクトルのワードを定義します。 

does>

( ... -- ... a-addr ) 

(E: ... -- ??? )  

ワード定義の実行節を開始します。 

field name

( offset size -- offset+size ) (E: addr -- addr+offset ) 

指定されたオフセットポインタを作成します。 

struct

( -- 0 ) 

field の作成に備えて初期化します。

value name

( n -- ) (E: -- n )  

指定された、変更可能な数を作成します。 

variable name

( -- ) (E: -- a-addr )  

変数を定義します。 

辞書検索コマンド

表 I-20 辞書検索コマンド

コマンド  

スタックダイアグラム 

説明 

' name

( -- xt ) 

ワードを辞書から検索します。実行トークンを返します。定義外で使用してください。 

["] name

( -- xt ) 

定義内、外のどちらでも使用できる点以外は、 ' と同じです。

.calls

( xt -- ) 

実行トークンが xt であるワードを呼び出すすべてのワードリストを表示します。

$find

( str len -- str len false | xt true ) 

str、len で指定するワードを検索します。見つかった場合、xt と true をスタックに残します。見つからなかった場合、文字列と false をスタックに残します。 

find

( pstr -- pstr false | xt n ) 

pstr で指定するワードを検索します。見つかった場合、xt と true をスタックに残します。見つからなかった場合、文字列と false をスタックに残します。 

(パックされた文字列を使用しないようにするため、 $find の使用を推奨します。)

see thisword

( -- ) 

指定されたコマンドを逆コンパイルします。 

 (see)

( xt -- ) 

実行トークンによって示されるワードを逆コンパイルします。 

sift

( pstr -- ) 

pstr によって示される文字列を含むすべての辞書エントリの名前を表示します。

sifting ccc

( -- ) 

指定された文字処理を含むすべての辞書エントリの名前を表示します。ccc 内には空白文字は含まれません。

 words

( -- )  

辞書内のすべての表示可能なワードを表示します。 

辞書コンパイルコマンド

表 I-21 辞書コンパイルコマンド

コマンド  

スタックダイアグラム 

説明 

,

( n -- ) 

数値を辞書に入れます。 

c,

( byte -- ) 

バイトを辞書に入れます。 

w,

( word -- ) 

16 ビット数値を辞書に入れます。 

l,

( quad -- ) 

32 ビット数値を辞書に入れます。 

[

( -- ) 

解釈を開始します。 

]

( -- ) 

解釈を終了し、コンパイルを開始します。 

allot

( n -- ) 

辞書に n バイトを割り当てます。

>body

( xt -- a-addr ) 

実行トークンからデータフィールドアドレスを見つけます。 

body>

( a-addr -- xt ) 

データフィールドアドレスから実行トークンを見つけます。 

compile

( -- ) 

次のワードを実行時にコンパイルします。(postpone の使用を推奨)

[compile] name

( -- ) 

次の (即値) ワードをコンパイルします。( postpone の使用を推奨)

forget name

( -- ) 

辞書から指定されたワードとそれ以降の全ワードを削除します。 

here

( -- addr ) 

辞書の先頭アドレス。 

immediate

( -- ) 

最後の定義を即値としてマークします。 

to name

( n -- ) 

defer ワードまたは value に新しい処理を実装します。

literal

( n -- ) 

数値をコンパイルします。 

origin

( -- addr ) 

Forth システムの開始アドレスを返します。 

patch new-word old-word word-to-patch

( -- ) 

old-wordword-to-patchnew-word に置き換えます。

(patch)

( new-n old-n xt -- ) 

old-nxt によって示されるワードの new-n に置き換えます。

postpone name

( -- ) 

ワード name の実行を遅延させます。 

 recursive

( -- ) 

辞書内のコンパイル中のコロン定義を表示可能にし、そのワードの名前をそれ自身の定義内で再帰的に使用可能にします。 

 state

( -- addr ) 

コンパイル状態でゼロ以外の変数。 

アセンブリ言語のプログラミング

表 I-22 アセンブリ言語のプログラミング

コマンド 

スタックダイアグラム 

説明 

code name

( -- code-sys ) 

(E: ... -- ??? )  

name と呼ばれるアセンブリ言語ルーチンの作成を開始します。code の後のコマンドはアセンブラニーモニックとして解釈されます。アセンブラがインストールされていなくても、 "," を使用してマシンコードを数値 (たとえば、16 進) で入力しなければならなくなる点は別として、code は依然存在することに注意してください。

 c;

( code-sys -- ) 

アセンブリ言語ルーチンの作成を終了します。自動的に Forth インタプリタの next 機能をアセンブルし、その結果それが実行されたとき、next から作成されたアセンブリコードワードが制御を通常どおり呼び出し元に戻すようにします。 

label name

( -- code-sys ) 

(E: -- a-addr ) 

name と呼ばれるアセンブリ言語ルーチンの作成を開始します。 label で作成されたワードは、実行されたとき、そのコードのアドレスをスタックに残します。label の後のコマンドはアセンブラニーモニックとして解釈されます。code の場合と同様に、 はアセンブラがインストールされていなくても存在します。

end-code

( code-sys -- ) 

label で開始されたアセンブリ言語のパッチを終了します。

基数値表示

表 I-23 基数値表示

コマンド 

スタックダイアグラム 

説明 

.

( n -- ) 

数値を現在の基数で表示します。 

.r

( n size -- ) 

数値を固定幅フィールドで表示します。 

.s

( -- ) 

データスタックの内容を表示します。 

showstack

( -- ) 

自動的に各 ok プロンプトの前で .s を実行します。

noshowstack

( -- ) 

ok プロンプトの前のスタックの自動表示をオフに設定します。

u.

( u -- ) 

符号なしの数値を表示します。 

u.r

( u size -- ) 

符号なしの数値を固定幅フィールドで表示します。 

基数の変更

表 I-24 基数の変更

コマンド  

スタックダイアグラム 

説明 

.d

( n -- ) 

基数を変更しないで n を 10 進で表示します。

.h

( n -- ) 

基数を変更しないで n を 16 進で表示します。

base

( -- addr ) 

基数を格納している変数。 

decimal

( -- ) 

基数を 10 に設定します。 

d# number

( -- n ) 

次の数値を 10 進で解釈します。基数は変わりません。 

hex

( -- ) 

基数を 16 に設定します。 

h# number

( -- n ) 

次の数値を 16 進で解釈します。基数は変わりません。 

数値出力ワード用基本式

表 I-25 数値出力ワード用基本式

コマンド 

スタックダイアグラム 

説明 

 #

( +l1 -- +l2 ) 

数字をピクチャ数値出力に変換します。 

 #>

( l-- addr +n )  

ピクチャ数値出力を終了します。 

 <#

( -- ) 

ピクチャ数値出力を初期化します。 

 (.)

( n -- ) 

数値を文字列に変換します。 

 (u.)

( -- addr len ) 

符号なし数値を文字列に変換します。 

 digit

( char base -- digit true | char false ) 

文字を数字に変換します。 

 hold

( char -- ) 

ピクチャ数値出力文字列内に char を挿入します。 

 $number

( addr len -- true | n false ) 

文字列を数値に変換します。 

#s

( l -- 0 ) 

残りの数字をピクチャ数値出力に変換します。 

sign

( n -- ) 

ピクチャ出力の符号を設定します。 

テキスト入力制御

表 I-26 テキスト入力制御

コマンド  

スタックダイアグラム 

説明 

( ccc )

( -- ) 

コメントを開始します。 

¥ rest-of-line

( -- ) 

行の残りの部分をコメントとして扱います。 

ascii ccc

( -- char ) 

次のワードの最初の ASCII 文字の数値を得ます。 

accept

( addr len1 -- len2 ) 

コンソール入力デバイスから編集済み入力行を得て addr に格納します。len1 は許容される最大の長さ、len 2 は実際に受け取られた長さです。

expect

( addr len -- ) 

コンソールから入力行を得て表示し、addr に格納します。 (Recommend using accept instead.)

key

( -- char ) 

コンソール入力デバイスから 1 文字を読みます。 

key?

( -- flag ) 

コンソール入力デバイスでキーが押された場合 true。 

parse

( char -- str len ) 

入力バッファーからの char で区切られたテキストを構文解析します。 

parse-word

( -- str len ) 

入力バッファーからの char で区切られたテキストを、先行空白文字を読み飛ばして構文解析します。 

safe-parse-word

( -- str len ) 

入力が NULL 文字列のときエラーを示す場合を使用目的としている点を除いて、 parse-word と同じです。

word

( char -- pstr ) 

入力バッファーから char で区切られている文字列をまとめ、メモリ位置 pstrにパックされた文字列として入れます。(parse の使用を推奨します)

テキスト出力表示

表 I-27 テキスト出力表示

コマンド 

スタックダイアグラム 

説明 

." ccc"

( -- ) 

後の表示に備えて、文字列をコンパイルします。 

(cr

( -- ) 

出力カーソルを現在行の先頭に戻します。 

cr

( -- ) 

ディスプレイ上の 1 行を終了し、次の行に進みます。 

emit

( char -- ) 

文字を表示します。 

exit?

( -- flag ) 

スクロール制御プロンプト More [<space>,<cr>,q] ? を有効にします。

復帰フラグは、ユーザーが出力を終了する場合 true です。

space

( -- ) 

空白文字 を表示します。

spaces

( +n -- )  

+n 箇の空白文字を表示します。

type

( addr +n -- ) 

n 箇の文字を表示します。

書式付き出力

表 I-28 書式付き出力

コマンド 

スタックダイアグラム 

説明 

#lines

( -- rows ) 

出力デバイス上の行番号を保持する変数。 

#out

( -- a-addr ) 

出力デバイス上のカラム番号を保持する変数。 

テキスト文字列の操作

表 I-29 テキスト文字列の操作

コマンド  

スタックダイアグラム 

説明 

",

( addr len -- ) 

addr から始まり、長さが len バイトである配列をパックされた文字列としてコンパイルし、辞書の一番上に入れます。

" ccc"

( -- addr len ) 

解釈結果またはコンパイル結果の入力ストリーム文字列をまとめます。文字列内では、"(00,ff...) を使用して任意のバイト値を取り入れることができます。

.( ccc)

( -- )  

文字列を即時に表示します。 

-trailing

( addr +n1 -- addr +n2 ) 

後続空白文字を削除します。 

bl

( -- char ) 

空白文字の ASCII コード。10 進の 32。 

count

( pstr -- addr +n ) 

パックされている文字列をアンパックします。 

lcc

( char -- lowercase-char ) 

文字を小文字に変換します。 

left-parse-string

( addr len char -- addrR lenR addrL lenL ) 

char の文字列を分割します (char は捨てられます)。

pack

( addr len pstr -- pstr ) 

addr len からパックされた文字列を作り、メモリー位置 pstr に入れます。

p" ccc"

( -- pstr ) 

入力ストリームから文字列をまとめ、パックされた文字列として格納します。 

upc

( char -- uppercase-char ) 

文字を大文字に変換します。 

入出力先リダイレクトコマンド

表 I-30 入出力先リダイレクトコマンド

コマンド 

スタックダイアグラム 

説明 

input

( device -- ) 

以降の入力に使用されるデバイス (keyboard、または device-specifier) を選択します。

io

( device -- ) 

以降の入出力に使用されるデバイスを選択します。 

output

( device -- ) 

以降の出力に使用されるデバイス (screen、または device-specifier) を選択します。

ASCII 定数

表 I-31 ASCII 定数

コマンド 

スタックダイアグラム 

説明 

bell

( -- n ) 

ベル文字の ASCII コード。10 進の 7。 

bs

( -- n ) 

バックスペース文字の ASCII コード。10 進の 8。 

コマンド行エディタ用キー操作コマンド

表 I-32 コマンド行エディタ用キー操作コマンド

コマンド 

機能 

 Control-B

1 文字位置戻ります。 

 Escape B

1 語戻ります。 

 Control-F

1 文字位置進みます。 

 Escape F

1 語進みます。 

 Control-A

行の始めに戻ります。 

 Control-E

行の終わりに進みます。 

 Delete

前の 1 文字を消去します。  

 Backspace

前の 1 文字を消去します。 

 Control-H

1 つ前の文字を消去します。 

 Escape H

語の先頭からカーソルの直前まで消去し、消去した文字を保存バッファーに格納します。 

 Control-W

語の先頭からカーソルの直前まで消去し、消去した文字を保存バッファーに格納します。 

 Control-D

現在位置の文字を消去します。 

 Escape D

語の現在位置から終わりまで消去し、消去した文字を保存バッファーに格納します。 

 Control-K

カーソルから行の終わりまで消去し、消去した文字を保存バッファーに格納します。 

 Control-U

1 行全体を消去し、消去した文字を保存バッファーに格納します。 

 Control-R

行を再表示します。 

 Control-Q

(制御文字を入力するために) 次の制御文字をそのまま入力可能にします。 

 Control-Y

カーソルの前に保存バッファーの内容を挿入します。 

 Control-P

履歴から、1 行前の行を選択、表示します。 

 Control-N

履歴から、1 行後の行を選択、表示します。 

 Control-L

履歴から、編集バッファーの全内容を表示します。 

コマンド補完キー操作コマンド

表 I-33 コマンド補完キー操作コマンド

コマンド 

機能 

 Control-Space

現在のコマンドを補完します。 

 Control-/

すべての一致/コマンド補完の候補を表示します。 

比較コマンド

表 I-34 比較コマンド

コマンド  

スタックダイアグラム 

説明 

<

( n1 n2 -- flag ) 

n1 < n2 の場合 true。

<=

( n1 n2 -- flag ) 

n1 <= n2 の場合 true。

<>

( n1 n2 -- flag ) 

n1n2 に等しくない場合 true。

=

( n1 n2 -- flag ) 

n1 = n2 の場合 true。

>

( n1 n2 -- flag ) 

n1 > n2 の場合 true。

>=

( n1 n2 -- flag ) 

n1 >= n2 の場合 true。

0<

( n -- flag ) 

n < 0 の場合 true。

0<=

( n -- flag ) 

n <= 0 の場合 true。

0<>

( n -- flag ) 

n <> 0 の場合 true。

0=

( n -- flag ) 

n = 0 の場合 true (さらにフラグを反転します)。

0>

( n -- flag ) 

n > 0 の場合 true。

0>=

( n -- flag )  

n >= 0 の場合 true。

between

( n min max -- flag ) 

min <= n <= max の場合 true。

false

( -- 0 ) 

FALSE の値 = 0。

true

( -- -1 ) 

TRUE の値 = -1。

u<

( u1 u2 -- flag ) 

u1 < u2 の場合 true。u1、u2 とも符号なし。

u<=

( u1 u2 -- flag ) 

u1 <= u2 の場合 true、符号なし。

u>

( u1 u2 -- flag ) 

u1 > u2 の場合 true、符号なし。

u>=

( u1 u2 -- flag ) 

u1 >= u2 の場合 true、符号なし。

within

( n min max -- flag ) 

min <= n < max の場合 true。

if...then...elseコマンド

表 I-35 if...then...elseコマンド

コマンド  

スタックダイアグラム 

説明 

if

( flag -- ) 

flagtrue の場合、次のコードを実行します。

else

( -- ) 

flagfalse の場合、次のコードを実行します。

then

( -- ) 

if...then...else を終了します。

case 文コマンド

表 I-36 case 文コマンド

コマンド  

スタックダイアグラム 

説明 

case

( selector -- selector )  

case...endcase 条件付き構造を開始します。

endcase

( selector | {empty} -- ) 

case...endcase 条件付き構造を終了します。

endof

( -- ) 

case...endcase 条件付き構造内の oof...endof 句を終了します。

of

( selector test-value -- selector | {empty} ) 

case 条件付き構造内の of...endcase 句を開始します。

begin (条件付き) ループコマンド

表 I-37 begin (条件付き) ループコマンド

コマンド  

スタックダイアグラム 

説明 

again

( -- ) 

begin...again 無限ループを終了します。

begin

( -- ) 

begin...while...repeatbegin...until、または begin...again ループを開始します。

repeat

( -- ) 

begin...while...repeat ループを終了します。

until

( flag -- ) 

flag が true の間、begin...until ループの実行を続けます。

while

( flag -- ) 

flag が true の間、begin...while...repeat ループの実行を続けます。

do (カウント付き) ループコマンド

表 I-38 do (カウント付き) ループコマンド

コマンド 

スタックダイアグラム 

説明 

+loop

( n -- ) 

do...+loop 構造を終了します。 ループインデックを加算し、 do に戻ります (n < 0 の場合は、インデックスは start から end まで変わります。)

?do

( end start -- ) 

?do...loop の 0 回またはそれ以上の実行を開始します。インデックスは start から end-1 まで変わります。 end = start の場合はループは実行されません。

?leave

( flag -- ) 

flag がゼロ以外の場合になった場合、 do...loop から抜け出させます。

do

( end start -- ) 

do...loop を開始します。インデックスは start から end-1 まで変わります。

例:  10 0 do i . loop (0 1 2...d e f と出力します)。

i

( -- n ) 

ループインデックス 

j

( -- n ) 

1 つ外側のループのループインデックス。. 

leave

( -- ) 

do...loop から抜け出させます。

loop

( -- ) 

do...loop の終わり。

プログラム実行制御コマンド

表 I-39 プログラム実行制御コマンド

コマンド 

スタックダイアグラム 

説明 

abort

( -- ) 

現在の実行を終了させ、キーボードコマンドを解釈します。 

abort" ccc"

( abort? -- ) 

abort? flag が true の場合は、実行を終了させ、メッセージを表示します。

eval

( ... str len -- ??? ) 

evaluate の同義語。

evaluate

( ... str len -- ??? ) 

指定する文字列から Forth のソースを解釈します。 

execute

( xt -- ) 

実行トークンがスタックにあるワードを実行します。 

exit

( -- ) 

現在のワードから復帰します。(カウント付きループでは使用できません。) 

quit

( -- ) 

スタック内容をまったく変えない点を除いて、 abort と同じです。

ファイル読み取りコマンド

表 I-40 ファイル読み取りコマンド

コマンド 

スタックダイアグラム 

説明 

?go

( -- ) 

Forth、FCode、またはバイナリプログラムを実行します。 

boot [specifiers] -h

( -- ) 

指定されたソースからファイルを読み込みます。 

byte-load

( addr span -- ) 

読み込まれた FCode バイナリファイルを解釈します。 span は通常 1 です。

dl

( -- ) 

tip を使用してシリアルライン経由で Forth ファイルを読み込み、解釈します。次のように入力します。 ‾C cat filename ^-D

dlbin

( -- ) 

tip を使用してシリアルライン経由でバイナリファイルを読み込みます。

次のように入力します。‾C cat filename

dload filename

( addr -- ) 

Ethernet 経由で指定されたファイルを指定されたアドレスに読み込みます。  

eval

( addr len -- ) 

読み込まれた Forth テキストファイルを解釈します。 

go

( -- ) 

あらかじめ読み込まれていたバイナリプログラムの実行を開始します。または、中断されたプログラムの実行を再開します。 

init-program

( -- ) 

バイナリファイルの実行に備えて初期化します。 

load device-specifier argument

( -- ) 

指定されたデバイスから load-base によって指定されるアドレスにデータを読み込みます。

load-base

( -- addr ) 

load がデバイスから読んだデータを読み込むアドレス。

逆コンパイラコマンド

表 I-41 逆コンパイラコマンド

コマンド 

スタックダイアグラム 

説明 

+dis

( -- ) 

最後に逆コンパイルを中断したところから逆コンパイルを継続します。 

dis

( addr -- ) 

指定されたアドレスから逆コンパイルを開始します。 

ブレークポイントコマンド

表 I-42 ブレークポイントコマンド

コマンド  

スタックダイアグラム 

説明 

+bp

( addr -- ) 

指定されたアドレスにブレークポイントを追加します。 

-bp

( addr -- ) 

指定されたアドレスからブレークポイントを削除します。 

--bp

( -- )  

最新に設定されたブレークポイントを削除します。 

.bp

( -- ) 

現在設定されているすべてのブレークポイントを表示します。 

.breakpoint

( -- ) 

ブレークポイントが発生したときに指定された処理を実行します。このワードは、実行させたい任意の処理を実行するように変更できます。たとえば、ブレークポイントごとにレジスタを表示するには、['] .registers is .breakpoint と入力します。 デフォルト処理は .instruction です。複数の処理を実行させるには、実行させたいすべての処理を呼び出す 1 つの定義を作成し、次にそのワードを .breakpoint に読み込みます。

.instruction

( -- ) 

最後に現れたブレークポイントのアドレスとオペコードを表示します。 

.step

( -- ) 

シングルステップで実行になったときに指定された処理を実行します (.breakpointを参照)。

bpoff

( -- ) 

すべてのブレークポイントを削除します。 

finish-loop

( -- ) 

このループの終わりまで実行します。 

go

( -- ) 

ブレークポイントから実行を継続します。これを利用して、 go を発行する前にプロセッサのプログラムカウンタを設定することにより、任意のアドレスに移ることができます。

gos

( n -- ) 

gon 回実行します。

hop

( -- ) 

(step コマンドと同じです。) サブルーチン呼び出しを 1 つの命令として扱ってください。

hops

( n -- ) 

hopn 回実行します。

return

( -- ) 

このサブルーチンの終わりまで実行します。 

returnl

( -- )  

このリーフサブルーチンの終わりまで実行します。 

skip

( -- ) 

現在の命令をスキップします (実行しません)。 

step

( -- ) 

1 命令を 1 つずつ実行します。 

steps

( n -- ) 

stepn 回実行します。

till

( addr -- ) 

指定されたアドレスに行き当たるまで実行します。+bp go と等価。

Forth ソースレベルデバッガコマンド

表 I-43 Forth ソースレベルデバッガコマンド

コマンド 

説明 

c

"Continue (継続)"。シングルステップ実行から追跡に切り替え、デバッグ中のワードの実行の残り部分を追跡します。 

d

"Down a level (1 レベルダウン)"。今表示された名前のワードをデバッグ対象として指定し、次にそのワードを実行します。 

u

"Up a level (1 レベルアップ)"。デバッグ中のワードからデバッグ対象の指定を取り消します。その呼び出し元をデバッグ対象として指定し、それまでデバッグされていたワードの実行を終了します。 

f

下位の Forth インタプリタを起動します。そのインタプリタを resume で終了させると、 f コマンドが実行されたところで制御がデバッガに戻ります。

g

"Go"。デバッガをオフに設定し、実行を継続します。 

q

"Quit (終了)"。デバッグ中のワードとそのすべての呼び出し元の実行を強制終了させ、制御をコマンドインタプリタに戻します。 

s

"see"。デバッグされているワードを逆コンパイルします。 

$

スタックの一番上の address,len をテキスト文字列として表示します。 

h

"Help"。シンボリックデバッガマニュアルを表示します。 

?

"Short Help"。簡略シンボリックデバッガマニュアルを表示します。 

debug name

指定された Forth ワードをデバッグ対象として指定します。以降は、name を実行しようとするたびに、必ず Forth ソースレベルデバッガを起動します。 debug の実行後は、 debug- でデバッグがオフされるまではシステムの実行速度が落ちることがあります。( "dup" などの基本 Forth ワードはデバッグしないでください。)

(debug

入力ストリームから名前ではなく、スタックから実行トークンを取り出す点を除いて、 debug と同じです。

debug-off

Forth ソースレベルデバッガをオフにします。以降、ワードのデバッグは行われません。 

resume

下位インタプリタを終了し、制御をデバッガのシングルステップ実行に戻します (この表の f コマンドを参照)。

stepping

Forth ソースレベルデバッガをシングルステップ (実行) モードに設定し、デバッグ中のワードを 1 ステップずつ対話的に実行できるようにします。シングルステップモードはデフォルトです。 

tracing

Forth ソースレベルデバッガを追跡モードに設定します。このモードは、デバッグ中のワードの実行を追跡し、その間そのワードが呼び出す各ワードの名前とスタックの内容を表示します。 

<space-bar>

今表示されたワードを実行し、次のワードのデバッグに移ります。 

時間ユーティリティー

表 I-44 時間ユーティリティー

コマンド 

スタックダイアグラム 

説明 

get-msecs

( -- ms ) 

現在の ミリ秒 (ms) 単位の概略時刻を返します。 

ms

( n -- ) 

n ミリ秒 (ms) 遅延させます。分解能は 1 ミリ秒 (ms) です。

その他の処理

表 I-45 その他の処理

コマンド 

スタックダイアグラム 

説明 

callback string

( value -- ) 

指定された値と文字列を使用して サン OS を呼び出します。 

catch

( ... xt -- ??? error-code | ??? false ) 

xt を実行し、throw が呼び出されない場合は throw エラーコードまたは 0 を返します。

eject-floppy

( -- ) 

フロッピードライブからフロッピーディスクをイジェクトします。 

firmware-version

(-- n ) 

メジャー/マイナー CPU ファームウェアバージョン (つまり、0x00030001 = ファームウェアバージョン 3.1) を返します。 

forth

( -- ) 

Forth の主要ワードを検索順の一番上に復元します。 

ftrace

( -- ) 

例外発生時の呼び出し順序を表示します。 

noop

( -- ) 

何もしません。 

reset-all

( -- ) 

システム全体をリセットします (電源再投入と同じ)。 

sync

( -- )  

オペレーティングシステムを呼び出してすべての保留情報をハードディスクに書き出します。さらに、ファイルシステム間の同期が取れたら起動します。 

throw

( error-code -- ) 

与えられたエラーコードを catch に返します。

マルチプロセッサコマンド

表 I-46 マルチプロセッサコマンド

コマンド 

スタックダイアグラム 

説明 

switch-cpu

( cpu# -- ) 

指定された CPU に切り替えます。 

メモリー割り当てコマンド

表 I-47 メモリー割り当てコマンド

コマンド 

スタックダイアグラム 

説明 

map?

( virt -- ) 

仮想アドレスのメモリー割り当て情報を表示します。 

memmap

( phys space size -- virt ) 

物理アドレス領域を割り当て、割り当てた仮想アドレスを返します。free-virtual で割り当てを解除します。

obio

( -- space ) 

デバイスアドレス空間を割り当て対象として指定します。 

obmem

( -- space ) 

オンボードのメモリーアドレス空間を割り当て対象として指定します。 

sbus

( -- space ) 

SBus アドレス空間を割り当て対象として指定します。 

メモリー割り当て用基本式

表 I-48 メモリー割り当て用基本式

コマンド 

スタックダイアグラム 

説明 

iomap?

( virt -- ) 

仮想アドレスの IOMMU ページ割り当てエントリを表示します。 

iomap-page

( phys space virt -- ) 

physspace によって指定される物理ページを仮想アドレスに割り当てます。

iomap-pages

( phys space virt size -- ) 

iomap-page を連続して実行して size によって指定されるメモリー領域を割り当てます。

iopgmap@

( virt -- pte | 0 ) 

仮想アドレスの IOMMU ページ割り当てエントリを返します。 

iopgmap!

( pte virt -- ) 

仮想アドレスの新しいページ割り当てエントリを格納します。 

map-page

( phys space virt -- )  

アドレス phys から始まる 1 メモリーページを指定されたアドレス空間内の仮想アドレス virt に割り当てます。アドレスはすべてページ境界に揃うように、切り捨てが行われます

map-pages

( phys space virt size -- ) 

map-page を連続して実行してメモリー領域を指定された size に割り当てます。

map-region

( region# virt -- ) 

1 つの領域を割り当てます。 

map-segments

( smentry virt len -- ) 

smap! o を連続して実行してメモリー領域を割り当てます。

pgmap!

( pmentry virt -- ) 

仮想アドレスの新しいページ割り当てエントリを格納します。 

pgmap?

( virt -- ) 

仮想アドレスに対応するページ割り当てエントリ (復号化された英語) を表示します。 

pgmap@

( virt -- pmentry ) 

仮想アドレスのページ割り当てエントリを返します。 

pagesize

( -- size ) 

ページの size を返します。

rmap!

( rmentry virt -- ) 

仮想アドレスの新しい領域割り当てエントリを格納します。 

rmap@

( virt -- rmentry ) 

仮想アドレスの領域割り当てエントリを返します。 

segmentsize

( -- size ) 

セグメントの size を返します。

smap!

( smentry virt -- ) 

仮想アドレスの新しいセグメント割り当てエントリを返します。 

smap?

( virt -- ) 

仮想アドレスのセグメント割り当てエントリを書式付きで表示します。 

smap@

( virt -- smentry ) 

仮想アドレスのセグメント割り当てエントリを返します。 

キャッシュ操作コマンド

表 I-49 キャッシュ操作コマンド

コマンド 

スタックダイアグラム 

説明 

clear-cache

( -- ) 

すべてのキャッシュエントリを無効にします。 

cache-off

( -- ) 

キャッシュを使用不可にします。 

cache-on

( -- ) 

キャッシュを使用可能にします。 

ecdata!

( data offset -- ) 

データ をキャッシュ オフセット に格納します。

ecdata@

( offset -- data ) 

データ をキャッシュ オフセット から取り出し (返し) ます。

ectag!

( value offset -- ) 

タグ値 をキャッシュ オフセット に格納します。

ectag@

( offset -- value )  

キャッシュオフセットタグ値 を返します。

flush-cache

( -- ) 

保留状態のデータをキャッシュから書いて戻します。 

Sun-4u マシンのマシンレジスタ読み取り/書き込み

表 I-50 Sun-4u マシンのマシンレジスタ読み取り/書き込み

コマンド 

スタックダイアグラム 

説明 

aux!

( data -- ) 

補助レジスタに書き込みます。 

aux@

( -- data ) 

補助レジスタから読み出します。 

代替アドレス空間アクセスコマンド

表 I-51 代替アドレス空間アクセスコマンド

コマンド  

スタックダイアグラム 

説明 

spacec!

( byte addr asi -- ) 

asi の 1 バイトaddr に格納します。

spacec?

( addr asi -- ) 

addr アドレスの asi の 1 バイト を表示します。

spacec@

( addr asi -- byte ) 

addr にある asi から 1 バイト を取り出します。

spaced!

( quad1 quad2 addr asi -- ) 

asi の 2 つの quadlet をアドレス addr に格納します。数値の順序は実装によります。

spaced?

( addr asi -- ) 

addrasi にある 2 つの quadlet を表示します。数値の順序は実装によります。

spaced@

( addr asi -- quad1 quad2 ) 

asiaddr から 2 つ 4 バイトワードを取り出します。

spacel!

( quad addr asi -- ) 

asiaddr に 4 バイトワードを格納します。

spacel?

( addr asi -- ) 

asiaddr にある 4 バイトワードを表示します。

spacel@

( addr asi -- quad ) 

asiaddr から 4 バイトワードを取り出します。

spacew!

( w addr asi -- ) 

asiaddr に 2 バイトワードを格納します。

spacew?

( addr asi -- ) 

asiaddr にある 2 バイトワードを表示します。

spacew@

( addr asi -- w ) 

asiaddr から 2 バイトワードを取り出します。

spacex!

( x addr asi -- ) 

asiaddr に数値を格納します。

spacex?

( addr asi -- ) 

asiaddr にあるワードを表示します。

spacex@

( addr asi -- x ) 

asiaddr からワードを取り出します。

SPARC レジスタコマンド

表 I-52 SPARC レジスタコマンド

コマンド 

スタックダイアグラム 

説明 

%g0%g7

( -- value ) 

指定されたグローバルレジスタの値を返します。 

%i0%i7

( -- value ) 

指定された入力レジスタの値を返します。 

%l0%l7

( -- value ) 

指定されたローカルレジスタの値を返します。 

%o0%o7

( -- value ) 

指定された出力レジスタの値を返します。 

%pc %npc %y

( -- value ) 

指定されたレジスタの値を返します。 

%f0%f31

( -- value ) 

指定された浮動小数点レジスタの値を返します。 

.fregisters

( -- ) 

%f0 から %f31 までの値を表示します。

.locals

( -- ) 

ilo レジスタの値を表示します。

.registers

( -- ) 

プロセッサレジスタの値を表示します。 

.window

( window# -- ) 

w .locals; と同じ。指定されたウィンドウを表示します。

ctrace

( -- ) 

C サブルーチンを示す復帰スタックを表示します。 

set-pc

( new-value -- ) 

%pc を new-value に、 %npc を (new-value + 4) にそれぞれ設定します。

to regname

( new-value -- ) 

上記のうちの任意のレジスタの格納値を変更します。 new-value to regname の形式で使用してください。

w

( window# -- ) 

現在のウィンドウを、%ix、%lx、または %ox 表示向けに設定します。

SPARC V9 レジスタコマンド

表 I-53 SPARC V9 レジスタコマンド

コマンド  

スタックダイアグラム 

説明 

%fprs

%asi

%pstate

%tl-c

%pil

%tstate

%tt

%tba

%cwp

%cansave

%canrestore

%otherwin

%wstate

%cleanwin

( -- value ) 

指定されたレジスタの値を返します。 

.pstate

( -- ) 

プロセッサ状態レジスタの書式付き表示。 

.ver

( -- ) 

バージョンレジスタの書式付き表示。 

.ccr

( -- ) 

ccr レジスタの書式付き表示。 

.trap-registers

( -- ) 

トラップレジスタを表示します。 

緊急キーボードコマンド

表 I-54 緊急キーボードコマンド

コマンド 

説明 

Stop

POST を省略します。このコマンドはセキュリティーモードには依存しません。 (注 : 一部のシステムはデフォルトで POST を省略します。そのような場合は、「Stop-D 」を使用して POST を起動してください。)

Stop-A

強制終了させます。 

Stop-D

診断モードに入ります (diag-switch?true に設定します)。

Stop-F

プローブを行わず、ttya で FORTH に入ります。 fexit を使用して初期設定処理を続けます。ハードウェアが壊れている場合に効果があります。

Stop-N

NVRAM の内容をデフォルト設定に戻します。