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

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

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

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

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

表記 

説明 

|

代替スタック結果。たとえば、 ( input -- adr len false | result true )

?

未知のスタック項目 (??? から変更)。

???

未知のスタック項目。 

acf

コードフィールドアドレス。 

adr

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

adr16

メモリーアドレス。16 ビット境界でなければなりません。 

adr32

メモリーアドレス。32 ビット境界でなければなりません。 

adr64

メモリーアドレス。64 ビット境界でなければなりません。 

byte bxxx

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

char

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

cnt

len

size

カウント値または長さ。 

flag xxx?

0 = false。そのほかのすべての値 = true (通常 -1)。 

long Lxxx

32 ビット値。 

n n1 n2 n3

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

+n u

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

n[64]

(n.low n.hi)

拡張精度 (64 ビット) 数 (2 スタック項目)。 

phys

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

pstr

パックされた文字列 (adr len はパックされない文字列のアドレスと長さ)。

virt

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

word wxxx

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

表 E-2 制限付きモニターコマンド

コマンド 

説明 

b [specifiers]

オペレーティングシステムを起動します (ok プロンプトで boot を入力するのと同じ)。

c

停止されているプログラムの実行を再開します( ok プロンプトで go を入力するのと同じ)。

n

Forth モニタ-に入ります。 

表 E-3 デバイス別名の確認と作成

コマンド 

説明 

devalias

現在のすべてのデバイス別名を表示します。 

devalias alias

alias に対応するデバイスパス名を表示します。 

devalias alias device-path

device-path を表す別名を定義します。同じ名前の別名がすでに存在すると、新しい名前に更新します。

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

コマンド 

説明 

.attributes

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

cd device-path

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

cd node-name

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

cd ..

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

cd /

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

device-end

現在のデバイスノードを選択解除し、ノードが選択されない状態にします。 

ls

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

pwd

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

show-devs [device-path]

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

words

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

表 E-5 ヘルプコマンド

コマンド 

説明 

help

ヘルプの主なカテゴリを表示します。 

help category

カテゴリ内の全コマンドのヘルプを表示します。カテゴリ記述の最初の単語だけを使用します。 

help command

各コマンドのヘルプを表示します (ただし、ヘルプが提供されている場合)。 

表 E-6 boot コマンドの一般的オプション

変数 

説明 

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

[device-specifier]

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

cdrom (CD-ROM ドライブ)

disk (ハードディスク)

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

net ( Ethernet )

tape (SCSI テープ)

[filename]

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

[options]

-a -デバイスと起動ファイル名を聞いてきます。

-h - プログラムを読み込んだ後、停止します。

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

表 E-7 診断テストコマンド

コマンド 

説明 

probe-scsi

組み込み SCSI バスに接続されているデバイスを確認します。 

probe-scsi-all [device-path]

システムの、指定したデバイスツリーノードの下にインストールされているすべての SCSI バスに対して probe-scsi を実行します。(device-path を指定しないと、ルートノードが使用されます。)

test device-specifier

指定したデバイスのセルフテスト方法を実行します。例を示します。

test floppy : フロッピードライブが接続されている場合、テストします。

test /memory : NVRAM 変数 selftest-#megs で指定される M バイト数をテストします。または diag-switch?true の場合は全メモリをテストします。

test net : ネットワーク接続をテストします。

test-all [device-specifier]

指定したデバイスツリーノードの下の (組み込みセルフテスト方法を備える) すべてのデバイスをテストします。(device-specifier を指定しないと、ルートノードが使用されます。)

watch-clock

時計機能をテストします。

watch-net

ネットワークの接続を監視します。 

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

コマンド 

説明 

banner

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

show-sbus

インストールされ、プローブされる SBus デバイスのリストを表示します。 

.enet-addr

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

.idprom

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

.traps

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

.version

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

表 E-9 NVRAM システム変数

変数名 

設定値 

説明 

auto-boot?

true 

true の場合、電源投入またはリセット後に自動的に起動します。 

boot-device

disk  

起動するデバイス。 

boot-file

空白文字 

起動するファイル (空白の場合、第 2 ブーターがデフォルトを選択します)。 

boot-from

vmunix 

起動デバイスとファイルを指定します (1.x のみ)。

boot-from-diag

le()vmunix 

診断起動デバイスとファイル (1.x のみ)。

diag-device

net 

診断起動ソースデバイス。 

diag-file

empty string 

診断モードで起動するファイル。 

diag-switch?

false 

true の場合、診断プログラムを実行します。 

fcode-debug?

false 

true の場合、差し込み式デバイス FCode の名前フィールドを取り入れます。 

hardware-revision

デフォルトなし 

システムバージョン情報。 

input-device

keyboard 

電源投入時の入力デバイス (通常 keyboardttya、または ttyb)。

keyboard-click?

false 

true の場合、キーボードクリックを使用可能にします。 

keymap

デフォルトなし 

カスタムキーボードのキーマップ。 

last-hardware-update

デフォルトなし 

システム更新情報。 

local-mac-address?

false 

true の場合、ネットワークドライバはシステムのアドレスではなく、自身の MAC アドレスを使用します。 

mfg-switch?

false 

true の場合、 Stop-A で中断されるまでシステムのセルフテストを繰り返します。

nvramrc

空白文字 

NVRAMRC の内容。 

oem-banner

空白文字 

カスタム OEM バナー ( oem-banner? がtrue で使用可能になります)。

oem-banner?

false 

true の場合、カスタム OEM バナーを使用します。 

oem-logo

デフォルトなし 

バイト配列カスタム OEM ロゴ ( oem-logo? が true で使用可能になります)。

16 進で表示。 

oem-logo?

false 

true の場合、カスタム OEM ロゴを使用します (true でない場合は、サン ロゴを使用します)。 

output-device

screen 

電源投入時の出力デバイス (通常 screenttya、または ttyb)。

sbus-probe-list

0123 

プローブされる SBus スロット、それらのスロットがプローブされる順番。 

screen-#columns

80 

画面上のカラム数 (文字数/行)。 

screen-#rows

34 

画面上の行数。 

scsi-initiator-id

ホストアダプタの SCSI バスアドレス。範囲は 0 - 7。 

sd-targets

31204567 

SCSI ディスクユニットを割り当てます (1.x のみ)。

security-#badlogins

デフォルトなし 

誤ったセキュリティーパスワードの試行回数。 

security-mode

none 

ファームウェアセキュリティーレベル (nonecommand、または full)。

security-password

デフォルトなし 

ファームウェアセキュリティーパスワード (表示されません)。これを直接設定してはなりません

selftest-#megs

テストするメモリーの M バイト数。 diag-switch?true の場合は無視。

skip-vme-loopback?

false 

true の場合、POST は VMEbus のループバックテストを行いません。 

st-targets

45670123 

SCSI テープユニットを割り当てます (1.x のみ)。

sunmon-compat?

false 

true の場合、制限付きモニタープロンプト (>) を表示します。 

testarea

1 バイトのスクラッチフィールド。読み取り/書き込みテストに使用されます。 

tpe-link-test?

true 

組み込みより対線 Ethernet 向け 10baseT リンクテストを有効にします。 

ttya-mode

9600,8,n,1,- 

ttya (ボーレート、データビット数、パリティー、ストッブビット数、ハンドシェーク)。 

ttyb-mode

9600,8,n,1,- 

ttyb (ボーレート、データビット数、パリティー、ストッブビット数、ハンドシェーク)。 

ttya-ignore-cd

true 

true の場合、オペレーティングシステムは ttya のキャリア検出を無視します。 

ttyb-ignore-cd

true 

true の場合、オペレーティングシステムは ttyb のキャリア検出を無視します。 

ttya-rts-dtr-off

false 

true の場合、オペレーティングシステムは ttya の DTR、RTS を有効にしません。 

ttyb-rts-dtr-off

false 

true の場合、オペレーティングシステムは ttyb の DTR、RTS を有効にしません。 

use-nvramrc?

false 

true の場合、システム起動時に nvramrc のコマンドを実行します。 

version2?

true 

true の場合、ハイブリッド(1.x/2.x) PROMがバージョン 2.xで起動します。

watchdog-reboot?

false 

true の場合、ウォッチドッグリセット後に再起動します。 

表 E-10 システム変数の表示/変更

コマンド 

説明 

printenv

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

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

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

setenv parameter value

parameter を 10 進またはテキスト値 value に設定します。

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

set-default parameter

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

set-defaults

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

表 E-11 システム変数用コマンド基本式

コマンド 

スタックダイアグラム 

説明 

nodefault-bytes parameter

( len -- ) Usage: ( -- adr len ) 

(カスタム) NVRAM 変数を作成します。このコマンドは変数を永続的にするために NVRAMRC で使用します。 

変数

( -- ??? ) 

(現在の) フィールド値を返します (データ型は変数によります)。 

show parameter

( -- ) 

(現在の) フィールド値を表示します (数値は 10 進表示)。 

表 E-12 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 から削除します。 

表 E-13 nvedit キー操作コマンド

キー操作 

説明 

Control-B

1 文字位置戻ります。 

Control-C

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

Control-F

文字位置進みます。 

Control-K

行の終わりでは、現在行に次の行をつなぎます (つまり、この行を 1 つにします)。 

Control-L

すべての行を表示します。 

Control-N

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

Control-O

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

Control-P

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

Delete

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

Return

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

表 E-14 スタック操作コマンド

コマンド  

スタックダイアグラム 

説明 

-rot

( n1 n2 n3 -- n3 n1 n2 ) 

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

>r

( n -- ) 

スタック項目を復帰スタックに転送します。(使用には注意が必要です。) 

?dup

( n -- n n | 0 ) 

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

2drop

( n1 n2 -- ) 

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

2dup

( n1 n2 -- n1 n2 n1 n2 ) 

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

2over

( n1 n2 n3 n4 -- n1 n2 n3 n4 n1 n2 ) 

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

2rot

( n1 n2 n3 n4 n5 n6 -- n3 n4 n5 n6 n1 n2 ) 

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

2swap

( n1 n2 n3 n4 -- n3 n4 n1 n2 ) 

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

3drop

( n1 n2 n3 -- ) 

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

3dup

( n1 n2 n3 -- n1 n2 n3 n1 n2 n3 ) 

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

clear

( ??? -- ) 

スタックを空にします。 

depth

( ??? -- ??? +n ) 

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

drop

( n -- ) 

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

dup

( n -- n n )  

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

nip

( n1 n2 -- n2 ) 

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

over

( n1 n2 -- n1 n2 n1 ) 

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

pick

( ??? +n -- ??? n2 ) 

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

r>

( -- n ) 

復帰スタック項目をスタックに転送します。(使用には注意が必要です。) 

r@

( -- n ) 

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

roll

( ??? +n -- ? ) 

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

rot

( n1 n2 n3 -- n2 n3 n1 ) 

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

swap

( n1 n2 -- n2 n1 ) 

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

tuck

( n1 n2 -- n2 n1 n2 ) 

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

表 E-15 コロン定義ワード

コマンド 

スタックダイアグラム 

説明 

: name

( -- ) 

新しいワード定義の作成を開始します。 

;  

( -- ) 

新しいワード定義の作成を終了します。 

表 E-16 演算機能

コマンド 

スタックダイアグラム 

説明 

*

( n1 n2 -- n3 ) 

n1 * n2 の乗算を行います。

+

( n1 n2 -- n3 ) 

n1 + n2の加算を行います。

-

( n1 n2 -- n3 ) 

n1 - n2の減算を行います。

/

( n1 n2 -- quot ) 

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

/mod

( n1 n2 -- rem quot ) 

n1 / n2の剰余と商。

<<

( n1 +n -- n2 ) 

n1+n ビット左シフトします。

>>

( n1 +n -- n2 ) 

n1+n ビット右シフトします。

>>a

( n1 +n -- n2 ) 

n1+n ビット算術右シフトします。

*/

( n1 n2 n3 -- n4 ) 

n1 * n2 / n3

*/mod

( n1 n2 n3 -- rem quot ) 

n1 * n2 / n3の剰余と商。

1+

( n1 -- n2 ) 

1 を足します。 

1-

( n1 -- n2 ) 

1 を引きます。 

2*

( n1 -- n2 ) 

2 を掛けます。 

2+

( n1 -- n2 ) 

2 を足します。 

2-

( n1 -- n2 )  

2 を引きます。 

2/

( n1 -- n2 ) 

2 で割ります。 

abs

( n -- u ) 

絶対値。 

aligned

( n1 -- n2 ) 

n1 を次の 4 の整数倍に切り上げます。

and

( n1 n2 -- n3 ) 

ビット単位の論理積。 

bounds

( startadr len -- endadr startadr ) 

startadr lendo ループ用にendadrstartadr に変換します。

bljoin

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

4 バイトを結合して 32 ビットのロングワードを作ります。 

bwjoin

( b.low b.hi -- word ) 

2 バイトを結合して 16 ビットのワードを作ります。 

flip

( word1 -- word2 ) 

16 ビットワード内の 2 バイトをスワップします。 

lbsplit

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

32 ビットロングワードを 4 バイトに分割します。 

lwsplit

( long -- w.low w.hi ) 

32 ビットロングワードを 2 つの 16 ビットワードに分割します。 

max

( n1 n2 -- n3 ) 

n1n2 の大きいほうの値を n3 とします。

min

( n1 n2 -- n3 ) 

n1n2 の小さいほうの値を n3 とします

mod

( n1 n2 -- rem ) 

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

negate

( n1 -- n2 ) 

n1 の符号を変更します。

not

( n1 -- n2 ) 

ビット単位の 1 の補数。 

or

( n1 n2 -- n3 ) 

ビット単位の論理和。 

u*x

( u1 u2 -- product[64] ) 

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

u/mod

( u1 u2 -- un.rem un.quot ) 

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

u2/

( u1 -- u2 ) 

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

wbsplit

( word -- b.low b.hi ) 

16 ビットワードを 2 バイトに分割します。 

wflip

( long1 -- long2 ) 

32 ビットロングワードの半分をスワップします。 

wljoin

( w.low w.hi -- long ) 

2 ワードを結合してロングワードを作ります。 

x+

( n1[64] n2[64] -- n3[64] ) 

2 つの 64 ビット数値の加算を行います。 

x-

( n1[64] n2[64] -- n3[64] ) 

2 つの 64 ビット数値の減算を行います。 

xor

( n1 n2 -- n3 ) 

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

xu/mod

( u1[64] u2 -- rem quot ) 

符号なしの 64 ビット数値を符号なしの 32 ビット数値で割り、32 ビットの剰余と商を生じます。 

表 E-17 変換演算子

コマンド 

スタックダイアグラム 

説明 

/c

( -- n ) 

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

/c*

( n1 -- n2 ) 

n1/cを掛けます。

ca+

( adr1 index -- adr2 ) 

adr1index/c 倍増分します。

ca1+

( adr1 -- adr2 ) 

adr1/c だけ増分します。

/L

( -- n ) 

ロングワードのバイト数 = 4。 

/L*

( n1 -- n2 ) 

n1/L を掛けます。

La+

( adr1 index -- adr2 ) 

adr1index/L 倍増分します。

La1+

( adr1 -- adr2 ) 

adr1/L 増分します。

/n

( -- n ) 

通常のバイト数 - 4。 

/n*

( n1 -- n2 ) 

n1/n を掛けます。

na+

( adr1 index -- adr2 ) 

adr1index/n 倍増分します

na1+

( adr1 -- adr2 ) 

adr1/n だけ増分します。

/w

( -- n ) 

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

/w*

( n1 -- n2 ) 

n1/w を掛けます。

wa+

( adr1 index -- adr2 ) 

adr1index/w 倍増分します

wa1+

( adr1 -- adr2 ) 

adr1/w だけ増分します。

表 E-18 メモリーアクセスコマンド

コマンド 

スタックダイアグラム 

説明 

!

( n adr16 -- ) 

32 ビットの数値を adr16 に格納します。16 ビット境界でなければなりません。

+!

( n adr16 -- ) 

adr16 に格納されている 32 ビット数値に n を加算します。16 ビット境界でなければなりません。

<w@

( adr16 -- n ) 

符号付き 16 ビットワードを adr16 から取り出します。16 ビット境界でなければなりません。

?

( adr16 -- ) 

adr16 の 32 ビット数値を表示します。16 ビット境界でなければなりません。

@

( adr16 -- n ) 

32 ビット数値を adr16 から 取り出します。16 ビット境界でなければなりません。

2!

( n1 n2 adr16 -- ) 

2 数値をadr16 (n2 を下位アドレス)に格納します。16 ビット境界でなければなりません。

2@

( adr16 -- n1 n2 )  

2 数値を adr16 (n2 を下位アドレス)から取り出します。16 ビット境界でなければなりません。

blank

( adr u -- ) 

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

c!

( n adr -- ) 

n の下位バイトを adr に格納します。

c?

( adr -- ) 

adr の 1 バイトを表示します。

c@

( adr -- byte ) 

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

cmove

( adr1 adr2 u -- ) 

adr1 から adr2 に、下位バイトから先に u バイトをコピーします。

cmove>

( adr1 adr2 u -- ) 

adr1 から adr2 に、上位バイトから先に u バイトをコピーします。

cpeek

( adr -- false | byte true ) 

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

cpoke

( byte adr -- okay? ) 

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

comp

( adr1 adr2 len -- n ) 

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

d!

( n1 n2 adr64 -- ) 

2 つの 32 ビット数値を adr64 に格納します。64 ビット境界でなければなりません。順序は実装により異なります。

d?

( adr64 -- ) 

adr64の 2 つの 32 ビット数値を表示します。64 ビット境界でなければなりません。順序は実装により異なります。

d@

( adr64-- n1 n2 )  

2 つの 32 ビット数値をadr64 から取り出します。64 ビット境界でなければなりません。順序は実装により異なります。

dump

( adr len -- ) 

adr から始まる len メモリーバイトを表示します。

erase

( adr u -- ) 

u メモリーバイトを 0 に設定します。

fill

( adr size byte -- ) 

size メモリーバイトを byte に設定します。

L!

( n adr32 -- ) 

32 ビット数値を adr32 に格納します。32 ビット境界でなければなりません。

L?

( adr32 -- ) 

adr32 の 32 ビット数値を表示します。32 ビット境界でなければなりません。

L@

( adr32 -- long ) 

32 ビット数値を adr32 から取り出します。32 ビット境界でなければなりません。

lflips

( adr len -- ) 

指定された領域の 32 ビットロングワード内の 2 つの 16 ビットワードを入れ替えます。 

lpeek

( adr32 -- false | long true ) 

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

lpoke

( long adr32 -- okay? ) 

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

move

( adr1 adr2 u -- ) 

adr1 から adr2u バイトをコピーし、オーバラップを正しく処理します。

off

( adr16 -- ) 

false (32 ビットの 0) を adr16 に格納します。

on

( adr16 -- ) 

true (32 ビットの -1) を adr16 に格納します。

unaligned-L!

( long adr -- ) 

32 ビット数値を格納します。境界は任意です。 

unaligned-L@

( adr -- long ) 

32 ビット数値を取り出します。境界は任意です。 

unaligned-w!

( word adr -- ) 

16 ビット数値を格納します。境界は任意です。 

unaligned-w@

( adr -- word ) 

16 ビット数値を取り出します。境界は任意です。 

w!

( n adr16 -- ) 

16 ビット数値を adr16 に格納します。16 ビット境界でなければなりません。

w?

( adr16 -- ) 

adr16 の 16 ビット数値を表示します。16 ビット境界でなければなりません。

w@

( adr16 -- word ) 

16 ビット数値を adr16 から取り出します。16 ビット境界でなければなりません。

wflips

( adr len -- ) 

指定された領域の16 ビットワード内の 2 バイトを入れ替えます。 

wpeek

( adr16 -- false | word true ) 

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

wpoke

( word adr16 -- okay? ) 

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

表 E-19 メモリー割り当てコマンド

コマンド 

スタックダイアグラム 

説明 

alloc-mem

( size -- virt ) 

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

free-mem

( virt size -- ) 

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

free-virtual

( virt size -- ) 

memmap で作成されていた割り当てを取り消します。

map?

( virt -- ) 

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

memmap

( phys space size -- virt ) 

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

obio

( -- space ) 

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

obmem

( -- space ) 

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

sbus

( -- space ) 

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

表 E-20 メモリー割り当て用基本式

コマンド 

スタックダイアグラム 

説明 

cacheable

( space -- cache-space ) 

以降のアドレス割り当てをキャッシュ可能にするようにアドレス空間を変更します。 

iomap?

( virt -- ) 

仮想アドレスの IOMMU ページ割り当てエントリを表示します。左のスタックダイアグラムは Sun-4m マシン用です。 

iomap-page

( phys space virt -- ) 

physspace によって指定される物理ページを仮想アドレスに割り当てます。左のスタックダイアグラムは Sun-4m マシン用です。

iomap-pages

( phys space virt size -- ) 

iomap-pageを連続して実行して size によって指定されるメモリー領域を割り当てます。左のスタックダイアグラムは Sun-4m マシン用です。

iopgmap@

( virt -- pte | 0 ) 

仮想アドレスの IOMMU ページ割り当てエントリを返します。左のスタックダイアグラムは Sun-4m マシン用です。 

iopgmap!

( pte virt -- ) 

仮想アドレスの新しいページ割り当てエントリを格納します。左のスタックダイアグラムは Sun-4m マシン用です。 

map-page

( phys space virt -- )  

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

map-pages

( phys space virt size -- ) 

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

map-region

( region# virt -- ) 

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

map-regions

( region# virt size -- ) 

連続領域を割り当てます。 

map-segments

( smentry virt len -- ) 

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

pgmap!

( pmentry virt -- ) 

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

pgmap?

( virt -- ) 

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

pgmap@

( virt -- pmentry ) 

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

pagesize

( -- size ) 

ページのサイズを返します。通常は 4K (16 進の 1000)。 

rmap!

( rmentry virt -- ) 

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

rmap@

( virt -- rmentry ) 

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

segmentsize

( -- size ) 

セグメントのサイズを返します。通常 256K (16 進の 4000) 

smap!

( smentry virt -- ) 

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

smap?

( virt -- ) 

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

smap@

( virt -- smentry ) 

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

表 E-21 キャッシュ操作コマンド

コマンド  

スタックダイアグラム 

説明 

clear-cache

( -- ) 

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

cache-off

( -- ) 

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

cache-on

( -- ) 

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

cdata!

( data offset -- ) 

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

cdata@

( offset -- data ) 

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

ctag!

( value offset -- ) 

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

ctag@

( offset -- value )  

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

flush-cache

( -- ) 

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

表 E-22 Sun-4D マシンのマシンレジスタ読み取り/書き込み

コマンド 

スタックダイアグラム 

説明 

SuperSPARC(TM) モジュールレジスタアクセス用 

cxr!

( data -- )  

MMU コンテキストレジスタに書き込みます。 

mcr!

( data -- )  

モジュール制御レジスタに書き込みます。 

cxr@

( -- data )  

MMU コンテキストレジスタから読み取ります。 

mcr@

( -- data )  

MMU 制御レジスタから読み取ります。 

sfsr@

( -- data )  

同期障害ステータスレジスタから読み取ります。 

sfar@

( -- data )  

同期障害アドレスレジスタから読み取ります。 

afsr@

( -- data )  

非同期障害アドレスレジスタから読み取ります。 

afar@

( -- data )  

非同期障害アドレスレジスタから読み取ります。 

.mcr

( -- )  

モジュール制御レジスタを表示します。 

.sfsr

( -- )  

同期障害ステータスレジスタを表示します。 

MXCC 割り込みレジスタアクセス用 

interrupt-enable!

( data -- ) 

割り込みマスクレジスタに書き込みます。 

interrupt-enable@

( -- data ) 

割り込みマスクレジスタから読み取ります。 

interrupt-pending@

( -- data ) 

割り込み保留レジスタから読み取ります。 

interrupt-clear!

( data -- ) 

割り込みクリアレジスタに書き込みます。 

BootBus レジスタアクセス用 

control!

( datat -- ) 

BootBus 制御レジスタに書き込みます。 

control@

( -- datat ) 

BootBus 制御レジスタから読み取ります。 

status1@

( -- datat ) 

BootBus status1 レジスタから読み取ります。 

status2@

( -- datat ) 

BootBus status2 レジスタから読み取ります。 

表 E-23 Sun-4M マシンのマシンレジスタ読み取り/書き込み

コマンド 

スタックダイアグラム 

説明 

.mcr

( -- ) 

モジュール制御レジスタを表示します。 

.mfsr

( -- ) 

メモリーコントローラ障害ステータスレジスタを表示します。 

.sfsr

( -- ) 

同期障害ステータスレジスタを表示します。 

.sipr

( -- ) 

システム割り込み保留レジスタを表示します。 

aux!

( data -- ) 

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

aux@

( -- data ) 

補助レジスタから読み取ります。 

cxr!

( data -- ) 

MMU コンテキストレジスタに書き込みます。 

cxr@

( -- data ) 

MMU コンテキストレジスタから読み取ります。 

interrupt-enable!

( data -- ) 

システム割り込みターゲットマスクレジスタに書き込みます。 

interrupt-enable@

( -- data ) 

システム割り込みターゲットマスクレジスタから読み取ります。 

iommu-ctl!

( data -- ) 

IOMMU 制御レジスタに書き込みます。 

iommu-ctl@

( -- data) 

IOMMU 制御レジスタから読み取ります。 

mcr!

( data -- ) 

モジュール制御レジスタに書き込みます。 

mcr@

( -- data ) 

モジュール制御レジスタから読み取ります。 

mfsr!

( data -- ) 

メモリーコントローラ障害ステータスレジスタに書き込みます。 

mfsr@

( -- data ) 

メモリーコントローラ障害ステータスレジスタから読み取ります。 

msafar@

( -- data ) 

MBus-to-SBus 非同期障害アドレスレジスタの内容を読み取ります。 

msafsr!

( data -- ) 

MBus-to-SBus 非同期障害ステータスレジスタに書き込みます。 

msafsr@

( -- data ) 

MBus-to-SBus 非同期障害ステータスレジスタの内容を読み取ります。 

sfsr!

( data -- ) 

同期障害ステータスレジスタに書き込みます。 

sfsr@

( -- data ) 

同期障害ステータスレジスタの内容を読み取ります。 

sfar!

( data -- ) 

同期障害アドレスレジスタに書き込みます。 

sfar@

( -- data ) 

同期障害アドレスレジスタの内容を読み取ります。 

表 E-24 Sun-4C マシンのマシンレジスタ読み取り/書き込み

コマンド  

スタックダイアグラム 

説明 

aerr!

( data -- ) 

非同期エラーレジスタに書き込みます。 

aerr@

( -- data ) 

非同期エラーレジスタから読み取ります。 

averr!

( data -- ) 

非同期エラー仮想アドレスレジスタに書き込みます。 

averr@

( -- data ) 

非同期エラー仮想アドレスレジスタから読み取ります。 

aux!

( data -- ) 

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

aux@

( -- data ) 

補助レジスタの内容を表示します。 

context!

( data -- ) 

コンテキストレジスタに書き込みます。 

context@

( -- data ) 

コンテキストレジスタ (MMU コンテキスト) から読み取ります。 

dcontext@

( -- data ) 

コンテキストレジスタ (キャッシュコンテキスト) から読み取ります。 

enable!

( data -- ) 

システム有効化レジスタに書き込みます。 

enable@

( -- data ) 

システム有効化レジスタから読み取ります。 

interrupt-enable!

( data -- ) 

割り込み許可レジスタに書き込みます。 

interrupt-enable@

( -- data ) 

割り込み許可レジスタから読み取ります。 

serr!

( data -- ) 

同期エラーレジスタに書き込みます。 

serr@

( -- data ) 

同期エラーレジスタから読み取ります。 

sverr!

( data -- ) 

同期エラー仮想アドレスレジスタに書き込みます。 

sverr@

( -- data ) 

同期エラー仮想アドレスレジスタから読み取ります。 

表 E-25 代替アドレス空間アクセスコマンド

コマンド 

スタックダイアグラム 

説明 

spacec!

( byte adr asi -- ) 

1 バイトを asi とアドレスに格納します。 

spacec?

( adr asi -- ) 

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

spacec@

( adr asi -- byte ) 

1 バイトを asi とアドレスから取り出します。 

spaced!

( n1 n2 adr asi -- ) 

2 つの 32 ビット数値を asi とアドレスに格納します。 

数値の順序は実装によります。 

spaced?

( adr asi -- ) 

asi とアドレスの 2 つの 32 ビット数値を表示します。 

数値の順序は実装によります。 

spaced@

( adr asi -- n1 n2 ) 

2 つの 32 ビット数値を asi とアドレスから取り出します。 

数値の順序は実装によります。 

spaceL!

( long adr asi -- ) 

32 ビットロングワードを asi とアドレスに格納します。 

spaceL?

( adr asi -- ) 

asi とアドレスの 32 ビットロングワードを表示します。 

spaceL@

( adr asi -- long ) 

32 ビットロングワードを asi とアドレスから取り出します。 

spacew!

( word adr asi -- ) 

16 ビットワードを asi とアドレスに格納します。 

spacew?

( adr asi -- ) 

asi とアドレスの 16 ビットワードを表示します。 

spacew@

( adr asi -- word ) 

16 ビットワードを asi とアドレスから取り出します。 

表 E-26 ワード定義

コマンド 

スタックダイアグラム 

説明 

: name

( -- ) Usage: ( ??? -- ? ) 

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

;

( -- ) 

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

alias new-name old-name

( -- ) Usage: ( ??? -- ? ) 

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

buffer: name

( size -- ) Usage: ( -- adr64 )  

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

constant name

( n -- ) Usage: ( -- n )  

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

2constant name

( n1 n2 -- ) Usage: ( -- n1 n2 )  

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

create name

( -- ) Usage: ( -- adr16 )  

汎用定義ワード 

defer name

( -- ) Usage: ( ??? -- ? )  

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

does>

( -- adr16 )  

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

field name

( offset size -- offset+size ) Usage: ( adr -- adr+offset )  

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

struct

( -- 0 ) 

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

value name

( n -- ) Usage: ( -- n )  

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

variable name

( -- ) Usage: ( -- adr16 )  

変数を定義します。 

表 E-27 辞書検索コマンド

コマンド 

スタックダイアグラム 

説明 

' name

( -- acf ) 

ワードを辞書から検索します。コードフィールドアドレスを返します。定義外で使用してください。 

['] name

( -- acf ) 

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

.calls

( acf -- ) 

コンパイルアドレスが acf であるワードを呼び出すすべてのワードのリストを表示します。

$find

( adr len -- adr len false | acf n ) 

ワードを検索します。見つからなかった場合 n = 0 、ワードが即値の場合 n = 1 それ以外の場合は n = -1 になります。

find

( pstr -- pstr false | acf n ) 

辞書からワードを検索します。検索するワードは pstr で示されます。見つからなかった場合 n = 0、ワードが即値の場合 n = 1 、それ以外の場合は n = -1 になります。

see thisword

( -- ) 

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

(see)

( acf -- ) 

コードフィールドアドレスによって示されるワードを逆コンパイルします。 

sift

( pstr -- ) 

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

sifting ccc

( -- ) 

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

words

( -- )  

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

表 E-28 辞書コンパイルコマンド

コマンド 

スタックダイアグラム 

説明 

,

( n -- ) 

数値を辞書に入れます。 

c,

( byte -- ) 

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

w,

( word -- ) 

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

L,

( long -- ) 

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

[

( -- ) 

解釈を開始します。 

]

( -- ) 

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

allot

( n -- ) 

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

>body

( acf -- apf ) 

変数フィールドアドレスからコンパイルアドレスを見つけます。 

body>

( apf -- acf ) 

変数フィールドアドレスからコンパイルアドレスを見つけます。 

compile

( -- ) 

次のワードを実行時にコンパイルします。 

[compile] name

( -- ) 

次の (即値) ワードをコンパイルします。 

forget name

( -- ) 

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

here

( -- adr ) 

辞書の先頭アドレス。 

immediate

( -- ) 

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

is name

( n -- ) 

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

literal

( n -- ) 

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

origin

( -- adr ) 

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

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

( -- ) 

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

(patch

( new-n old-n acf -- ) 

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

recursive

( -- ) 

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

state

( -- adr ) 

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

表 E-29 アセンブル言語のプログラミング

コマンド 

スタックダイアグラム 

説明 

code name

( -- ) 

Usage: ( ??? -- ? )  

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

c;

( -- ) 

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

label name

( -- ) 

Usage: ( -- adr16 )  

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

end-code

( -- ) 

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

表 E-30 基本数値表示

コマンド 

スタックダイアグラム 

説明 

.

( n -- ) 

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

.r

( n size -- ) 

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

.s

( -- ) 

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

showstack

( -- ) 

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

u.

( u -- ) 

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

u.r

( u size -- ) 

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

表 E-31 基数の変更

コマンド  

スタックダイアグラム 

説明 

base

( -- adr ) 

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

binary

( -- ) 

基数を 2 に設定します。 

decimal

( -- ) 

基数を 10 に設定します。 

d# number

( -- n ) 

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

hex

( -- ) 

基数を 16 に設定します。 

h# number

( -- n ) 

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

.d

( n -- ) 

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

.h

( n -- ) 

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

表 E-32 数値出力ワード用基本式

コマンド 

スタックダイアグラム 

説明 

#

( +L1 -- +L2 ) 

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

#>

( L -- adr +n )  

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

<#

( -- ) 

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

(.)

( n -- ) 

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

(u.)

( -- adr len ) 

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

digit

( char base -- digit true | char false ) 

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

hold

( char -- ) 

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

$number

( adr len -- true | n false ) 

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

#s

( L -- 0 ) 

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

sign

( n -- ) 

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

表 E-33 テキスト入力制御

コマンド  

スタックダイアグラム 

説明 

( ccc )

( -- ) 

コメントを開始します。 

¥ rest-of-line

( -- ) 

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

ascii ccc

( -- char ) 

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

expect

( adr +n -- ) 

割り当てられた入力デバイスのキーボードから編集済みの入力を得、adr に格納します。

key

( -- char ) 

割り当てられた入力デバイスのキーボードから 1 文字を読みます。 

key?

( -- flag ) 

入力デバイスのキーボードでキーが押された場合 true。 

span

( -- adr16 ) 

expect が読む文字数を格納している変数。

word

( char -- pstr ) 

入力文字列から char で区切られている文字列をまとめ、メモリー位置 pstr に入れます。

表 E-34 テキスト出力表示

コマンド 

スタックダイアグラム 

説明 

." ccc"

( -- ) 

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

(cr

( -- ) 

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

cr

( -- ) 

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

emit

( char -- ) 

文字を表示します。 

exit?

( -- flag ) 

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

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

space

( -- ) 

空白文字 を表示します。

spaces

( +n -- )  

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

type

( adr +n -- ) 

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

表 E-35 書式付き出力

コマンド 

スタックダイアグラム 

説明 

#line

( -- adr16 ) 

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

#out

( -- adr16 ) 

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

表 E-36 テキスト文字列の操作

コマンド 

スタックダイアグラム 

説明 

", 

( adr len -- ) 

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

" ccc"

( -- adr len ) 

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

.( ccc)

( -- )  

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

-trailing

( adr +n1 -- adr +n2 ) 

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

bl

( -- char ) 

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

count

( pstr -- adr +n ) 

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

lcc

( char -- lowercase-char ) 

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

left-parse-string

( adr len char -- adrR lenR adrL lenL ) 

文字列を指定された区切り文字で分割します (区切り文字は捨てられます)。 

pack

( adr len pstr -- pstr ) 

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

p" ccc"

( -- pstr ) 

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

upc

( char -- uppercase-char ) 

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

表 E-37 入出力先の変更コマンド

コマンド  

スタックダイアグラム 

説明 

input

( device -- ) 

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

io

( device -- ) 

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

output

( device -- ) 

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

表 E-38 ASCII 定数

コマンド 

スタックダイアグラム 

説明 

bell

( -- n ) 

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

bs

( -- n ) 

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

表 E-39 行エディタコマンド

コマンド 

機能 

Control-A

行の始めに戻ります。 

Control-B

1 文字位置戻ります。 

Control-D

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

Control-E

行の終わりに進みます。 

Control-F

1 文字位置進みます。 

Control-H

1 つ前の文字を消去します (Delete または Backspace キーと同じです)。 

Control-K

現在位置から行の終わりまで、消去します。 

Control-L

コマンド履歴リストを表示します。 

Control-N

1 行後のコマンド行を呼び出します。 

Control-P

1 行前のコマンド行を呼び出します。 

Control-Q

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

Control-R

行を再表示します。 

Control-U

1 行全体を消去します。 

Control-W

1 つ前の語を消去します。 

Control-Y

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

Control-space

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

Control-/

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

Control-?

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

Control-}

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

Esc-B

1 語戻ります。 

Esc-D

語の現在位置から終わりまで消去します。 

Esc-F

1 語進みます。 

Esc-H

語の現在位置からはじめまで消去します (Control-Wと同じです)。

表 E-40 比較コマンド

コマンド 

スタックダイアグラム 

説明 

<

( n1 n2 -- flag ) 

n1 < n2 の場合 true。

<=

( n1 n2 -- flag ) 

n1 <= n2 の場合 true。

<>

( n1 n2 -- flag ) 

n1 <> n2 の場合 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。

表 E-41 if...then...else コマンド

コマンド  

スタックダイアグラム 

説明 

else

( -- ) 

比較が成立しなかった場合、次のコードを実行します。 

if

( flag -- ) 

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

then

( -- ) 

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

表 E-42 case 文コマンド

コマンド  

スタックダイアグラム 

説明 

case

( selector -- selector )  

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

endcase

( selector | {empty} -- ) 

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

endof

( -- ) 

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

of

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

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

表 E-43 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 ループの実行を続けます。

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

コマンド  

スタックダイアグラム 

説明 

+loop

( n -- ) 

do...+loop 構造を終了します。ループインデックスに n 加算し、 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 まで変わります。

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

i

( -- n ) 

ループインデックス。 

j

( -- n ) 

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

leave

( -- ) 

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

loop

( -- ) 

do...loop の終わり。

表 E-45 プログラム実行制御コマンド

コマンド 

スタックダイアグラム 

説明 

abort

( -- ) 

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

abort" ccc"

( abort? -- ) 

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

eval

( adr len -- ) 

配列から Forth のソースを解釈します。 

execute

( acf -- ) 

コードフィールドアドレスがスタックにあるワードを実行します。 

exit

( -- ) 

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

quit

( -- ) 

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

表 E-46 ファイル読み込みコマンド

コマンド 

スタックダイアグラム 

説明 

?go

( -- ) 

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

boot [specifiers] -h

( -- ) 

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

byte-load

( adr span -- ) 

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

dl

( -- ) 

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

dlbin

( -- ) 

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

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

dload filename

( adr -- ) 

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

eval

( adr len -- ) 

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

go

( -- ) 

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

init-program

( -- ) 

 

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

load device-specifier argument

( -- ) 

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

load-base

( -- adr ) 

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

表 E-47 逆アセンブラコマンド

コマンド 

スタックダイアグラム 

説明 

+dis

( -- ) 

最後に逆アセンブルを中断したところから逆アセンブルを継続します。 

dis

( adr -- ) 

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

表 E-48 SPARC レジスタコマンド

コマンド  

スタックダイアグラム 

説明 

%f0 %f31

( -- value ) 

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

%fsr

( -- value ) 

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

%g0 %g7

( -- value ) 

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

%i0 %i7

( -- value ) 

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

%L0 %L7

( -- value ) 

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

%o0 %o7

( -- value ) 

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

%pc %npc %psr

( -- value ) 

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

%y %wim %tbr

( -- value ) 

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

.fregisters

( -- ) 

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

.locals

( -- ) 

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

.psr

( -- ) 

%psr データを書式付きで表示します。

.registers

( -- ) 

%g0 から %g7 までのほかに、%pc%npc%psr%y%wim%tbr の値を表示します。

.window

( window# -- ) 

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

ctrace

( -- ) 

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

set-pc

( value -- ) 

%pc %npc を (指定された値+4 )にそれぞれ設定します。

to regname

( value -- ) 

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

w

( window# -- ) 

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

表 E-49 ブレークポイントコマンド

コマンド 

スタックダイアグラム 

説明 

+bp

( adr -- ) 

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

-bp

( adr -- ) 

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

--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

( adr -- ) 

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

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

コマンド 

説明 

C

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

D

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

F

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

Q

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

U

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

debug name

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

debug-off

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

resume

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

stepping

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

tracing

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

Space

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

表 E-51 時間ユーティリティー

コマンド 

スタックダイアグラム 

説明 

get-msecs

( -- ms ) 

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

ms

( n -- ) 

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

表 E-52 その他の処理

コマンド 

スタックダイアグラム 

説明 

callback string

( value -- ) 

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

catch

( ??? acf -- ? error-code ) 

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

eject-floppy

( -- ) 

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

firmware-version

(-- n) 

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

forth

( -- ) 

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

ftrace

( -- ) 

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

noop

( -- ) 

何もしません。 

old-mode

( -- ) 

制限付きモニターにします。 

reset

( -- ) 

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

ramforth

( -- ) 

Forth の辞書を RAM にコピーします。(システムによっては解釈の速度を上げ、システムワードのパッチを有効にします。) 

romforth

( -- ) 

ramforth をオフにします。

sync

( -- )  

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

throw

( error-code -- ) 

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

表 E-53 マルチプロセッサコマンド

コマンド 

スタックダイアグラム 

説明 

module-info

( -- ) 

すべての CPU モジュールのタイプと速度を表示します。 

switch-cpu

( cpu# -- ) 

指定された CPU に切り替えます。(マルチプロセッサの場合有効) 

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

コマンド 

説明 

Stop

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

Stop-A

強制終了させます。 

Stop-D

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

Stop-F

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

Stop-N

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