(57)【要約】【課題】プログラム開発支援システムにおいてソースファイル内関数が他ファイル内関数を呼び出す静的関係の情報から、若しくはプログラム実行時の全体の関数依存関係情報から、自動変数領域を低減化する。【解決手段】一つのオブジェクトファイル内に存在する関数群と別のオブジェクトファイル内に存在する関数群とが、更に別のオブジェクトファイル内に存在する関数を介することを含めても、呼出し関係に無い場合、両者内の自動変数領域の配置アドレスを同一化することを特徴とするリンカを提供する。【選択図】  図１
2004246776.tif 000002
【特許請求の範囲】
【請求項１】
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置するコンパイラにより、生成されたオブジェクトファイルの結合処理を行うリンカにおいて、
各オブジェクトファイル内に生成されている関数の依存関係情報を基に、ファイル単位にファイル内関数が他ファイル内関数を呼び出す関係の情報を、生成することを特徴とするリンカ。
【請求項２】
請求項１に記載のリンカにおいて、
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置し、かつ同時使用されない自動変数領域を共有化してメモリ使用量を低減化するコンパイラにより生成されたオブジェクトファイルをも結合処理の対象とし、
各オブジェクトファイル内に生成されている関数の依存関係情報を基に、ファイル単位にファイル内関数が他ファイル内関数の呼出し関係情報を、生成することを特徴とするリンカ。
【請求項３】
請求項２に記載のリンカにおいて、
各オブジェクトファイル内の自動変数領域のアドレス配置を決定する際に、生成されたファイル毎のファイル内関数呼出し情報を参照することを特徴とするリンカ。
【請求項４】
請求項３に記載のリンカにおいて、
一方のオブジェクトファイル内に存在する関数群と他方のオブジェクトファイル内に存在する関数群とが、別のオブジェクトファイル内に存在する関数を介することを含めても、呼出し関係に無い場合、
両者内の自動変数領域の配置アドレスを同一化することを特徴とするリンカ。
【請求項５】
ソースファイルをコンパイルしてオブジェクトファイルを生成し、それらのオブジェクトファイルをリンクして生成された実行形式プログラムをシミュレートするシミュレータにおいて、
割り込みやマルチタスク動作を含む各関数内から他関数の呼びだし、または割り込みやタスク切り替えによる他関数への遷移状態を解析し、
各関数の開始から終了までに実行される他関数の実行情報を生成し、
動的に決定される末端関数を検出することを特徴とするシミュレータ。
【請求項６】
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置するコンパイラにより、生成されたオブジェクトファイルの結合処理を行うリンカにおいて、
各オブジェクトファイル内の自動変数領域のアドレス配置を、上記請求項５にて検出される末端関数の情報を基にして、再度結合処理することにより決定することを特徴とするリンカ。
【請求項７】
請求項６に記載のリンカにおいて、
既にオブジェクトファイル毎にコンパイラにより自動変数領域の共有化を行っている場合、
一方のオブジェクトファイル内に存在する関数群と他方のオブジェクトファイル内に存在する関数群とが、全く依存関係に無い場合、両者内の自動変数領域の配置アドレスを同一化することを特徴とするリンカ。
【請求項８】
請求項６に記載のリンカにおいて、
コンパイラにより自動変数領域の共有化を行っていない場合、
それぞれの関数が、全く依存関係に無い場合、それら関数内の自動変数領域の配置アドレスを同一化することを特徴とするリンカ。
【請求項９】
コンパイラと、
請求項７又は請求項８に記載のリンカと、
請求項５に記載のシミュレータとを含むことを特徴とするプログラム開発支援システム。
【請求項１０】
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置するコンパイラにおいて、
各オブジェクトファイル内の自動変数領域のアドレス配置に関して、上記請求項５にて検出される末端関数の情報を基にして、末端関数同士の自動変数領域の配置アドレスを同一化することを特徴とするコンパイラ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、自動変数領域をスタティック領域に確保するコンパイラ、リンカ、及びシミュレータに関する。
【０００２】
【従来の技術】
図１１に示すように、プログラム開発では、ホストコンピュータ２上でソース（プログラム）ファイル４をコンパイラ６によりコンパイルしてオブジェクトファイル８を生成し、そのオブジェクトファイル８からリンカ１０により実行形式プログラム１２を生成する。
【０００３】
Ｃ言語等の高級プログラミング言語で記述されたプログラムをコンパイルすると、自動変数と呼ばれる、関数使用時のみ生成され関数の終了と共に消滅する変数は、スタック領域に生成されることが一般的である。しかし、スタック操作命令のないＣＰＵ用のコンパイラでは、自動変数は関数が終了しても消滅しない静的な領域に生成される。関数の数が多い、あるいは自動変数の数が多い場合は、この領域が多く必要になり、特にメモリ容量に制限のある組み込みシステムでは問題になることがある。
【０００４】
そこで、異なる関数内の自動変数が同時に存在する必要がないならば、同じ領域に確保されることによりメモリ容量を減らす技術が、例えば特許文献１にて公開されている。あるいは、特許文献２では、一つの関数内の自動変数の使われ方を調べ、排他的に使用される変数を同じ領域に配置する技術が公開されている。
【０００５】
しかし、これらの技術はコンパイル単位のメモリ容量削減であり、複数ファイルで構成されるプログラム全体からメモリ削減を行うものではない。
【０００６】
【特許文献１】
特開２０００−１１２７６７
【特許文献２】
特開２０００−２５０７６１
【０００７】
【発明が解決しようとする課題】
本発明は、プログラム開発支援システムにおいて、ソースファイル内関数が他ファイル内関数を呼び出す静的関係の情報から、若しくはプログラム実行時の全体の関数依存関係情報から、自動変数領域を低減化することを目的とする。
【０００８】
【課題を解決するための手段】
本発明は、上記の目的を達成するために為されたものである。本発明に係る請求項１に記載のリンカは、
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置するコンパイラにより、生成されたオブジェクトファイルの結合処理を行うリンカである。そのリンカにおいて、
各オブジェクトファイル内に生成されている関数の依存関係情報を基に、ファイル単位にファイル内関数が他ファイル内関数を呼び出す関係の情報を、生成することを特徴とする。
【０００９】
本発明に係る請求項２に記載のリンカは、
請求項１に記載のリンカにおいて、
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置し、かつ同時使用されない自動変数領域を共有化してメモリ使用量を低減化するコンパイラにより生成されたオブジェクトファイルをも結合処理の対象とし、
各オブジェクトファイル内に生成されている関数の依存関係情報を基に、ファイル単位にファイル内関数が他ファイル内関数の呼出し関係情報を、生成することを特徴とするリンカである。
【００１０】
本発明に係る請求項３に記載のリンカは、
請求項２に記載のリンカにおいて、
各オブジェクトファイル内の自動変数領域のアドレス配置を決定する際に、生成されたファイル毎のファイル内関数呼出し情報を参照することを特徴とするリンカである。
【００１１】
本発明に係る請求項４に記載のリンカは、
請求項３に記載のリンカにおいて、
一方のオブジェクトファイル内に存在する関数群と他方のオブジェクトファイル内に存在する関数群とが、別のオブジェクトファイル内に存在する関数を介することを含めても、呼出し関係に無い場合、
両者内の自動変数領域の配置アドレスを同一化することを特徴とするリンカである。
【００１２】
本発明に係る請求項５に記載のシミュレータは、
ソースファイルをコンパイルしてオブジェクトファイルを生成し、それらのオブジェクトファイルをリンクして生成された実行形式プログラムをシミュレートするシミュレータである。そのシミュレータにおいて、
割り込みやマルチタスク動作を含む各関数内から他関数の呼びだし、または割り込みやタスク切り替えによる他関数への遷移状態を解析し、
各関数の開始から終了までに実行される他関数の実行情報を生成し、
動的に決定される末端関数を検出することを特徴とする。
【００１３】
本発明に係る請求項６に記載のリンカは、
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置するコンパイラにより、生成されたオブジェクトファイルの結合処理を行うリンカである。そのリンカにおいて、
各オブジェクトファイル内の自動変数領域のアドレス配置を、上記請求項５にて検出される末端関数の情報を基にして、再度結合処理することにより決定することを特徴とする。
【００１４】
本発明に係る請求項７に記載のリンカは、
請求項６に記載のリンカにおいて、
既にオブジェクトファイル毎にコンパイラにより自動変数領域の共有化を行っている場合、
一方のオブジェクトファイル内に存在する関数群と他方のオブジェクトファイル内に存在する関数群とが、全く依存関係に無い場合、両者内の自動変数領域の配置アドレスを同一化することを特徴とするリンカである。
【００１５】
本発明に係る請求項８に記載のリンカは、
請求項６に記載のリンカにおいて、
コンパイラにより自動変数領域の共有化を行っていない場合、
それぞれの関数が、全く依存関係に無い場合、それら関数内の自動変数領域の配置アドレスを同一化することを特徴とするリンカである。
【００１６】
本発明に係る請求項９に記載のプログラム開発支援システムは、
コンパイラと、
請求項７又は請求項８に記載のリンカと、
請求項５に記載のシミュレータとを含むことを特徴とするプログラム開発支援システムである。
【００１７】
本発明に係る請求項１０に記載のコンパイラは、
ソースファイルに記述されている関数の自動変数領域をスタティック領域として配置するコンパイラにおいて、
各オブジェクトファイル内の自動変数領域のアドレス配置に関して、上記請求項５にて検出される末端関数の情報を基にして、末端関数同士の自動変数領域の配置アドレスを同一化することを特徴とするコンパイラ。
【００１８】
【発明の実施の形態】
以下、図面を参照して、本発明に係る好適な実施形態を説明する。
【００１９】
≪第１の実施形態≫
図１は、本発明の第１の実施形態に係るリンカ３０を含む、ホストコンピュータ２での処理の概略の流れ図である。
【００２０】
図１のホストコンピュータ２にて、コンパイラ２６は、各ソースプログラムファイル４よりそれぞれオブジェクトファイル２８を生成する。このときコンパイラ２６は、公知技術等を用いて関数間の自動変数領域の共有化による低減化、あるいは関数内の自動変数領域の共有化による低減化を実施する。この処理と同時に、コンパイラ２６は、各定義されている関数にて呼び出される外部関数名の一覧情報（依存関連情報リスト）を、オブジェクトファイル２８内に埋め込んでおく。
【００２１】
続いてリンカ３０は、これらのオブジェクトファイル２８の結合処理を行い、実行形式プログラム３２を生成する。このとき、各オブジェクトファイル２８に埋め込まれた関数一覧情報（依存関連情報リスト）を基にして、プログラム全体のソースファイル４に関する相互依存関係テーブルを作成する。ここで、依存関係のないオブジェクトファイル２８に含まれる関数群同士の自動変数領域を同じアドレスにマッピングすることにより、オブジェクトファイル間のメモリ容量の低減化を行う。
【００２２】
第１の実施形態を、簡易な例により説明する。まず、Ｆ１、Ｆ２、Ｆ３、Ｆ４なる４つのソースプログラムファイルがあり、それぞれのプログラムで定義されている関数とそれらが使用する関数の関連が、図２に示される構成であるとする。以下では、図２のソースプログラムファイルに対して第１の実施形態を適用する（図３、図４及び図５）。
【００２３】
図２において、ソースファイルＦ１では、関数Ｆ１Ａ、関数Ｆ１Ｂ、関数Ｆ１Ｃなる関数が定義されている。関数Ｆ１Ａは関数Ｆ１Ｂと関数Ｆ１Ｃを参照する。関数Ｆ１Ｂは外部関数Ｆ２Ａを参照する。そして関数Ｆ１Ｃは外部関数Ｆ３Ａを参照する。それぞれの関数は処理終了に到ると、親関数に戻る。
【００２４】
ソースファイルＦ２では、関数Ｆ２Ａ、関数Ｆ２Ｂ、関数Ｆ２Ｃなる関数が定義されている。関数Ｆ２Ａは関数Ｆ２ＢとＦ２Ｃを参照する。関数Ｆ２Ｂは関数Ｆ２Ｃと外部関数Ｆ４Ａを参照する。
【００２５】
ソースファイルＦ３では、関数Ｆ３Ａ、関数Ｆ３Ｂなる関数が定義されている。関数Ｆ３Ａが関数Ｆ３Ｂを参照する。関数Ｆ３Ｂは外部関数Ｆ４Ａを参照する。
【００２６】
ソースファイルＦ４では、関数Ｆ４Ａなる関数が定義されている。
【００２７】
まず、コンパイラ２６は、各ソース（プログラム）ファイル４内にて、自動変数領域の共有化を実施する。例えば、ソースファイルＦ１では、関数Ｆ１Ｂと関数Ｆ１Ｃの自動変数領域が公知技術を用いて共有化されることになる。あるいは、各関数内にて共有化が公知技術により実施されることもある。ソースファイルＦ２、ソースファイルＦ３においても、それぞれ公知技術により、自動変数領域の共有化が実施される。これにより各ソースファイル毎に一つの自動変数領域が確保されることになる。
【００２８】
さらにコンパイラ２６は、各ソースファイル内で定義されている関数が参照している外部関数の依存関連情報リスト（図３）を生成し、オブジェクトファイル内に出力する。図４は、図２の各ソースファイルにおける外部関数の依存関連情報リストの内容である。
【００２９】
各オブジェクトファイル２８の結合処理を行うリンカ３０は、各オブジェクトファイル２８内に生成されている外部関数の依存関連情報リストを参照し、ソースファイルに関する相互依存関係テーブルを作成する。この相互依存関係テーブルの例を、図２のソースファイルの例に関して、図５に示す。
【００３０】
図５のテーブルにおいて、縦軸横軸いずれにもソースファイル（の名称）が示されている。同テーブルにて、縦軸のソースファイルのファイル内関数から見て横軸のソースファイルのファイル内関数を呼び出していれば「×」、呼び出していなければ「○」が示される。
【００３１】
図５のテーブルの対角線に関して対称位置の双方が○となるソースファイルＦ１とＦ４、及びＦ２とＦ３は、直接には相互依存が無いことが判る。
【００３２】
この２つの組み合わせの夫々が、他のファイル内関数を介して依存関係にないか否か、さらに調べる。まず、Ｆ１とＦ４の関係を取り上げる。図５よりＦ１は、Ｆ２又はＦ３と相互依存関係にあることがわかる。さらにＦ２は、Ｆ４と依存関係にあることがわかる。同じくＦ３もＦ４と依存関係にある。つまり、Ｆ１とＦ４は、Ｆ２又はＦ３を介して相互依存関係にあることになる。
【００３３】
もう一つの組み合わせであるＦ２とＦ３の関係では、Ｆ２はＦ４と依存関係にあり、Ｆ３もＦ４と依存関係にあるが、Ｆ２とＦ３が依存関係にないことがわかる。
【００３４】
従って、リンカ３０は、Ｆ２とＦ３内の自動変数領域を共有化するようにメモリ配置を行い、自動変数領域の低減化を行う。
【００３５】
上記処理では、リンカ３０が、
（１）依存関連情報リストを基にして相互依存関係テーブルを作成すること、
（２）依存関係のないオブジェクトファイルに含まれる関数群同士の自動変数領域を同じアドレスにマッピングすること
を行なっている。
【００３６】
≪第２の実施形態≫
図６は、本発明の第２の実施形態に係るプログラム開発支援システム６０を含む、ホストコンピュータ２での処理の概略の流れ図である。
【００３７】
図６のホストコンピュータ２にて、コンパイラ４６は、各ソースプログラムファイル４よりそれぞれオブジェクトファイル４８を生成する。このときコンパイラ４６は、公知技術等を用いて関数間の自動変数領域の共有化による低減化、あるいは関数内の自動変数領域の共有化による低減化を実施する。
【００３８】
リンカ５０は、一旦これらのオブジェクトファイル４８の結合処理を行い、第１の実行形式プログラム５２−（１）を生成する。
【００３９】
第１の実行形式プログラム５２−（１）は、シミュレータ５４により、割り込み処理を含めて実動作に近い十分な動作がなされる。シミュレータ５４は、各関数の実行トレースを行い、動的な末端関数リストを含む関数依存情報を生成・ファイル化（５６）する。この関数依存情報ファイル５６を入力データとして参照させつつ、リンカ５０を再度実行させ、同時実行されることのない（プログラム）ファイル毎の関数群の自動変数領域を共有化し、メモリの低減化を行った第２の実行形式プログラム５２−（２）を生成する。
【００４０】
また、コンパイラ４６によりそのソースプログラムファイル４毎の自動変数領域の共通化が行われていない場合は、リンカ５０により一旦オブジェクトファイル４８の結合処理を行い、第１の実行形式プログラム５２−（１）を生成した後、同様にその第１の実行形式プログラム５２−（１）をシミュレータ５４にて実行して、関数依存情報ファイル５６を生成する。この関数依存情報ファイル５６を入力データとして参照させつつ、リンカ５０を再度実行させ、同時実行されることのない関数同士の自動変数領域を共有化し、メモリの低減化を行った第２の実行形式プログラム５２−（２）を生成する。
【００４１】
第２の実施形態を、簡易な例により説明する。まず、Ｔ１、Ｔ２、Ｔ３なる３つのタスクからなるマルチタスクシステムがあり、タスクＴ１は関数Ａで、タスクＴ２は関数Ｄで、またタスクＴ３は関数Ｉで表されるものとする。各タスクは図７のような構成であるとする。つまり、タスクＴ１である関数Ａは、関数Ｂを呼び、また関数Ｂは関数Ｃを呼ぶ。タスクＴ２である関数Ｄは関数Ｅを呼び、関数Ｅは関数Ｆと関数Ｇと関数Ｈを呼ぶ。さらにタスクＴ３である関数Ｉは、関数Ｊを呼ぶものとする。
【００４２】
このときの各関数記述は、何本のソースファイルであっても構わない。全ての関数が一本のソースファイルに記述されていてもよいし、関数毎にソースファイルが分かれていてもよい。
【００４３】
さて、このマルチタスクシステムを通常にリンクし、第１の実行形式プログラム５２−（１）を生成する。この第１の実行形式プログラム５２−（１）をシミュレータ５４にて実行する。このとき、シミュレータ５４は各関数の開始と終了を記録する。
【００４４】
十分な実行により得られた各関数のトレース結果が、図８の様であったとする。タスク間の移動は、割り込みやプログラム内のイベント待ちにより発生したもの（太矢印線）とし、タスク内の移動は通常の関数コールにて発生したものとする。関数の開始は“Ｓ”、終了は“Ｅ”で示す。
【００４５】
ここで、関数の開始と終了の記録を見ると、二重線で示す部分、つまり、
・関数Ｆの開始から終了まで、
・関数Ｊの開始から終了まで、
・関数Ｈの開始から終了まで、
・関数Ｃの開始から終了まで
が、他の関数を呼ぶことがない。つまり、これらが、実行時の末端関数である。
【００４６】
図９において、図７のマルチタスクシステムを静的に、即ち、図７の構成図のみによって、解析した場合の関数依存情報を示す。左側が呼び出す主体の関数、右側が呼び出されている客体の関数である。図９でみる限り、関数Ｃ、関数Ｆ、関数Ｇ、関数Ｈ、関数Ｊが末端関数であり、依存関係がないことになる。
【００４７】
ここで、第２の実施形態に係るシミュレータ５４実行による解析によると、図１０に示すような動的な関数依存情報が作成される。図１０では、図８で示されるように、関数Ｃ、関数Ｆ、関数Ｈ、関数Ｊが末端関数であり依存関係がないことがわかる。つまり、関数Ｇには実際には依存関係があることがわかる。シミュレータ５４は、これらの関数依存情報をファイル５６に出力する。
【００４８】
この関数依存情報ファイル５６を入力データとして参照しつつ、リンカ５０が、再度リンクを行う。その際には、関数Ｃ、関数Ｆ、関数Ｈ、関数Ｊの自動変数領域の共有化を行い、メモリ領域を低減化した第２の実行形式プログラム５２−（２）を生成する。ただし、公知技術等により、既にいくつかの関数の自動変数領域が共有化されている場合、その関数群単位で共有化を行う。
【００４９】
図７の例に関して、公知の技術によりプログラム実行以前に関数の依存関係を解析する場合、関数Ｇと関数Ｊとは静的には依存関係にないため、関数Ｇを含めて自動変数領域の共有化が行われてしまうことがある。本発明では、シミュレータにより動的な依存関係を解析できるため、自動変数領域を正確に共有化することができる。
【００５０】
上記処理では、リンカ５０が関数依存情報ファイル５６を入力データとして参照しつつ、同時実行されることのない関数同士の自動変数領域を共有化させている。このことをコンパイラ４６に行なわせるように、リンカ５０及びコンパイラ４６を設定することも可能である。その場合、図６の矢印６２が示すように、関数依存情報ファイル５６はコンパイラ４６の入力ファイルとなる。
【００５１】
【発明の効果】
本発明を利用することにより、以下のような効果を得ることができる。
【００５２】
まず、高級プログラミング言語で記述されたソースプログラムファイルをコンパイル・リンクするに際し、各オブジェクトファイル内に生成されている関数の依存関係情報を基に、ソースファイル内関数が他ファイル内関数を呼び出す静的関係の情報を生成することができる。
【００５３】
上記のソースファイル内関数が他ファイル内関数を呼び出す静的関係の情報を基にして、リンカが、各オブジェクトファイル内の自動変数領域のアドレス配置を決定することができる。その際、一方のオブジェクトファイル内に存在する関数群と他方のオブジェクトファイル内に存在する関数群とが、（別のオブジェクトファイル内に存在する関数を介することを含めて）呼び出す関係に無い場合には、両者（即ち、一方と他方）内の自動変数領域の配置アドレスを同一化し、自動変数メモリ領域の専有量を低減化させることができる。
【００５４】
コンパイル、及びリンク後に生成された実行形式プログラムをシミュレータにて実行する際、割り込みやマルチタスク動作時を含めて各関数の開始と終了を解析し、関数の依存関係より動的に決定される末端関数を検出することができる。
【００５５】
リンカにおいて、各オブジェクトファイル内の自動変数領域のアドレス配置を、シミュレータ実行により動的に生成された関数依存情報を基にして、再度結合処理することにより、決定させることができる。
【００５６】
リンカにおいて、既にオブジェクトファイル毎にコンパイラにより自動変数領域の共有化を行っている場合、一方のオブジェクトファイル内に存在する関数群と他方のオブジェクトファイル内に存在する関数群が、プログラム実行時に全く依存関係が無い場合、両者内の自動変数領域の配置アドレスを同一化し、自動変数メモリ領域の専有量を低減化させることができる。
【００５７】
リンカにおいて、コンパイラにより自動変数領域の共有化を行っていない場合、それぞれの関数が、プログラム実行時に全く依存関係が無い場合、それら関数内の自動変数領域の配置アドレスを同一化し、自動変数メモリ領域の専有量を低減化させることができる。
【００５８】
コンパイラ、リンカ、シミュレータで構成されるプログラム開発支援システムにおいて、プログラム実行時の全体の関数依存関係から、自動変数領域を低減化することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係るリンカを含むホストコンピュータでの処理の概略の流れ図である。
【図２】ソースプログラムと、それぞれのソースプログラムで定義されている関数と更にそれら関数が使用する関数の関連の、構成例である。
【図３】第１の実施形態で利用する外部関数の依存関連情報リストの構成である。
【図４】図２の各ソースファイル内で定義されている関数が参照している外部関数の依存関連情報リストの内容である。
【図５】図４の依存関連情報リストから生成される相互依存関係テーブルの内容である。
【図６】本発明の第２の実施形態に係るプログラム開発支援システムを含むホストコンピュータでの処理の概略の流れ図である。
【図７】タスクとそれに含まれる関数の、構成例である。
【図８】図７のシステムをシミュレータで十分にシミュレートすることにより、得られた各関数のトレース結果である。
【図９】図７のマルチタスクシステムを静的に、即ち、図７の構成図のみによって、解析した場合の関数依存情報である。
【図１０】図７のマルチタスクシステムを第２の実施形態に係るシミュレータ実行によって、解析して得られる関数依存情報である。
【図１１】従来技術のプログラム開発支援システムを含むホストコンピュータでの処理の概略の流れ図である。
【符号の説明】
２・・・ホストコンピュータ、６、２６、４６・・・コンパイラ、１０、３０、５０・・・リンカ、５４・・・シミュレータ。
【図１】
2004246776.tif 000003
【図２】
2004246776.tif 000004
【図３】
2004246776.tif 000005
【図４】
2004246776.tif 000006
【図５】
2004246776.tif 000007
【図６】
2004246776.tif 000008
【図７】
2004246776.tif 000009
【図８】
2004246776.tif 000010
【図９】
2004246776.tif 000011
【図１０】
2004246776.tif 000012
【図１１】
2004246776.tif 000013