ユーザーインタフェースにはプログラムを読み込み、実行するいくつかの方法があります。これらの方法は、それぞれ、Ethernet、ハードディスク、フロッピーディスク、シリアルポート A からファイルを読み込むためのもので、Forth、FCode、実行可能バイナリプログラムをサポートします。
表 5-1 に、いろいろなソースからファイルを読み込むコマンドを示します。
表 5-1 ファイル読み込み用コマンド
コマンド |
スタックダイアグラム |
説明 |
---|---|---|
?go |
( -- ) |
Forth、FCode、またはバイナリプログラムを実行します。 |
boot [specifiers] -h |
( -- ) |
指定されたソースからファイルを読み込みます。 |
byte-load |
( addr span -- ) |
読み込まれた FCode バイナリファイルを解釈します。span は通常 1 です。 |
dl |
( -- ) |
端末エミュレータを使用してシリアルラインから Forth ファイルを読み込み、解釈します。例として、tip を使用する場合は次のように入力します。 ‾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 コマンドによりデバイスから読み込んだデータを読み込むアドレス。 |
dload は、次に示すように、Ethernet を通じて指定されたアドレスに読み込みます。
ok 4000 dload filename |
上記の例で、filename はサーバーのルートからの相対パス名でなければなりません。 dload 入力のアドレスとして 4000 (16 進) を使用します。dload は簡易ファイル転送プロトコル (TFTP) を使用するので、このコマンド行が正しく動作するためには、サーバーのアクセス権の調整が必要なことがあります。
dload で読み込む Forth プログラムは、最初の 2 文字が「¥」(バックスラッシュと空白文字) である ASCII ファイルでなければなりません。読み込んだ Forth プログラムを実行するには、次のように入力します。
ok 4000 file-size @ eval |
上記の例で、file-size には読み込んだイメージのサイズを設定します。
dload で読み込む FCode プログラムは a.out ファイルでなければなりません。読み込んだ FCode プログラムを実行するには、次のように入力します。
ok 4000 1 byte-load |
byte-load は、SBus などの拡張ボード上での FCode プログラムの解釈用として OpenBoot が使用します。例の中にある 1 は、一般の場合の FCode 間の区切り指定用の変数の特定値です。dload はシステムメモリーに読み込まれるので、1 は正しい区切りになります。
dload で読み込む実行可能なバイナリプログラムは、a.outファイルであり、dload の入力アドレス (4000) を実行するようにリンクされていなければなりません。または、位置に依存しないようになっている必要があります。バイナリプログラムを実行するには、次のように入力します。
ok go |
上記のプログラムをもう一度実行するには、次のように入力します。
ok init-program go |
dload は、(起動コマンドの場合とは異なり) 中間起動プログラムを使用しません。したがって、a.out ファイル内のシンボル情報はすべてユーザインタフェースのシンボリックデバッグ機能で処理できます。(シンボリックデバッグについての詳細は、第 6 章「デバッグ」を参照してください)。
通常はオペレーティングシステムを読み込むのに使用される boot でも、プログラムを読み込み、実行することができます。boot の形式は次のとおりです。
ok boot [device-specifier] [filename] -h |
device-specifier はデバイスのフルパス名かデバイスの別名です。(デバイスのパス名および別名についての詳細は、第 1 章「概要」を参照してください。)
ハードディスクまたはフロッピーディスクのパーティションからの読み込みの場合は、filename は該当するファイルシステムからのファイルパスです。(起動可能フロッピーディスクの作成については、付録 B 「起動可能なフロッピーディスクの作成」 を参照してください。) Ethernet からの読み込みの場合は、filename はそのルートサーバー上のシステムのルートパーティションからのファイルパスです。どちらの場合も、先行の /をファイルパスでは省略する必要があります。
-h フラグは、プログラムを読み込むが、実行しないことを示します。
boot は、その処理を行うために、中間起動プログラムを使用します。ハードディスクまたはフロッピーディスクから読み込むときには、OpenBoot はまずディスクの起動ブロックを読み込み、次にこのブロックが第 2 レベルの起動プログラムを読み込みます。Ethernet から読み込むときには、OpenBoot ファームウェアは TFTP を使用して第 2 レベルの起動プログラムを読み込みます。filename と -h はそれらの中間起動プログラムに渡されます。
Forth のプログラムは ASCII ファイルであり、これは、2 次起動プログラムが必要とするファイル形式に変換されなければなりません。この変換用として、サン の SBus サポートグループから fakeboot という名前のユーティリティーが提供されています。ファイルは、メモリーに読み込んだ後は、eval コマンドを使用して実行できます。
たとえば、ファイルをアドレス 4010 (16 進) に読み込んでいて、その 934 バイト分について実行する場合は、次のように入力します。
ok 4010 d# 934 eval |
トークン生成プログラム (FCode 生成プログラム) によって生成された FCode プログラムは、2 次起動プログラムのファイル形式への変換が必要なことがあります。この処理には fakeboot が便利です。ファイルがメモリーに用意できたら、byte-load コマンドで実行します。
たとえば、ファイルがアドレス 4030 (16 進) に読み込まれているものとすれば、次のように入力します。
ok 4030 1 byte-load |
オペレーティングシステム以外のバイナリプログラムも、次のように入力して読み込み、実行できます。
ok go |
boot コマンドは -h を使用しているので、go が必要です。
dl で読み込む Forth のプログラムは ASCII ファイルでなければなりません。
シリアルラインからファイルを読み込むには、被試験システムのシリアルポートを、要求があればすぐにファイルを転送できるマシンに接続し、そのシステムで端末エミュレータを起動します。次に、端末エミュレータを使用して dl でファイルをダウンロードします。
次の例では、UNIX の端末エミュレータ tip を使用するものとします。(この手順についての詳細は、付録 A 「端末エミュレータを使うテスト」を参照してください。)
ok プロンプトで次のように入力します。
ok dl |
もう一方のシステムの tip ウィンドウから、ファイルを転送し、その後 Control-D を押してファイルの終わりを知らせます。
‾C (local command) cat filename (2 秒待つ) ^-D |
ファイルは、読み込まれた後に自動的に解釈され、ファイルが読み込まれたシステムの画面に再び ok プロンプトが現れます。
dlbin で読み込む FCode プログラムおよびバイナリプログラムは a.out ファイルでなければなりません。dlbin は、それらのファイルを a.out のヘッダーで示されるエントリポイントに読み込みます。最近のバージョンの FCode トークン生成プログラムは、エントリポイントを 4000 として a.out ファイルを作成します。
シリアルラインからファイルを読み込むには、システムのシリアルポート A を、要求があればすぐにファイルを転送できるマシンに接続します。次の例では、tip ウィンドウのセットアップを前提としています。(この手順については、付録 A 「端末エミュレータを使うテスト」 を参照してください。)
ok プロンプトで、次のように入力します。
ok dlbin |
もう一方のシステムの TIP ウィンドウからファイルを転送します。
‾C (local command) cat filename (2 秒待つ) |
ファイルが読み込まれる側のシステムの画面に ok プロンプトが現れます。
FCode プログラムを実行するには、次のように入力します。
ok 4000 1 byte-load ok |
バイナリプログラムを実行するには、次のように入力します。
ok go |