(57)【要約】【課題】１つのプログラムで、複数のシステム構成に対応できるようにする。【解決手段】ブートストラップ本体にジャンプされると、ＣＰＵコンフィグやタイマーの初期化、データキャッシュの初期化などが行われる。そして、キャッシュＲＡＭ上で、処理が実行されていない場合や外部モードやＲＯＭレスの状態で処理が実行されている場合、ＲＯＭからＲＡＭへデータのコピーが行われた後、キャッシュＲＡＭ領域へと処理がジャンプされる。その後、スタックの初期化、割込ベクタの設定、ヒープの初期化などの処理が順次行われる。本発明は、システムＬＳＩの開発などを行う装置に適用できる。【選択図】      図７
2004348677.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのＣＰＵと、
リセットベクタが含まれるブート用メモリ領域を含み、前記ＣＰＵとは異なる部分から書き換えが可能な揮発性メモリ、または、置き換えが可能な不揮発性メモリと、
キャッシュ実行可能または非キャッシュ実行可能なアプリケーション実行用メモリ領域を含み、前記ＣＰＵの外部から書き換えが可能で、前記ＣＰＵからメモリコントローラの初期化及び読み書きが可能で、必要に応じ前記ＣＰＵとは異なる部分から前記メモリコントローラの初期化が可能である揮発性メモリ、または、初期化不可能又は不要な不揮発性メモリと
を備え、
オペレーションシステム、及び、オペレーションシステムを利用したアプリケーションが実行可能で、オペレーションシステムを使用しないフリースタンディングのアプリケーションも実行可能である装置に対するアプリケーションを作成する作成装置により作成されるプログラムおいて、
アプリケーションプログラム及びブートストラップは、ブートストラップのエントリポイントが、実行ファイルのエントリポイントとなるように、単一の実行ファイルとしてリンクし、
前記リンク先のファイルを入力とし、前記エントリポイント、前記ブートストラップ、前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域のアドレスにマップされるようにレイアウトを行い、実行ファイルを生成し、
前記レイアウトの際、前記アプリケーション実行用メモリ領域のアドレスは、前記ＣＰＵによってキャッシュされる領域、または、キャッシュされない領域であり、
前記実行ファイルは、前記レイアウトされたアドレスと、レイアウトされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記アプリケーションプログラムが、前記ブート用メモリ領域に初期配置される場合、前記実行ファイルの前記エントリポイントが対応する前記ブート用メモリ領域の前記リセットベクタへマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記アプリケーションプログラムが前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記ＣＰＵによってキャッシュされない領域である場合、前記実行ファイルをそのままロード用イメージファイルとして出力し、
前記実行ファイルが前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記ＣＰＵによってキャッシュされる領域である場合、ロードの際キャッシュの状態と関係なく確実にＲＡＭへロードするため、前記実行ファイルの前記エントリポイントがこの領域に対応する前記ＣＰＵの非キャッシュ領域へマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記ロード用イメージファイルには前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記ロード用イメージファイルとは異なるファイル形式が必要とされる場合、前記ロード用イメージファイルを入力として、前記必要とされる形式へ変換する
ことを特徴とするプログラム。
【請求項２】
前記実行ファイルが、前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納され、
前記ロード用イメージファイルが、前記ロードすべきアドレスとロードされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納されている
ことを特徴とする請求項１に記載のプログラム。
【請求項３】
前記アプリケーションプログラムを前記アプリケーション実行用メモリ領域に初期配置する場合、必要に応じて前記ＣＰＵとは異なる部分から初期化を行い、
初期配置すべきアドレスと初期配置すべきデータは、前記ロード用イメージファイルに格納されている前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップを利用し、前記ロード用イメージファイルを初期配置する領域へロードする
ことを特徴とする請求項１に記載のプログラム。
【請求項４】
前記アプリケーションプログラムが、前記ブート用メモリ領域にロードされている場合、そのまま前記ＣＰＵのリセットを解除し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、ブート領域以外からソフトウエアを起動できる場合、プログラムカウンタがロードされた前記エントリポイントを指すように書き換え、前記ＣＰＵの実行を開始し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、前記プログラムカウンタの書き換えが行えない場合、ロードされた前記エントリポイントへジャンプする命令を前記リセットベクタ中に書き込み、前記ＣＰＵのリセットを解除する
ことを特徴とする請求項１に記載のプログラム。
【請求項５】
前記アプリケーションプログラムは、高級言語やアセンブラによりプログラミングされ、アブソリュート形式である非リロケータブルコードで構成され、
前記ブートストラップは、アブソリュート形式であるリロケータブルコードと非リロケータブルコードから構成され、前記リロケータブルコードから開始し、絶対アドレス分岐命令を利用して、前記非リロケータブルコード領域へジャンプし、前記非リロケータブルコードを実行し、
前記リロケータブルコードでは、ＣＰＵの初期化、データキャッシュの初期化と、起動するメモリ領域の違いに応じた処理を行い、
前記アプリケーションプログラムは、前記ブート用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化、メモリコントローラの初期化、前記アプリケーションプログラムのコード部及び初期化データを前記ブート用メモリ領域から前記アプリケーション実行用メモリ領域へコピーを行い、
また、前記アプリケーションプログラムは、前記ＣＰＵの非キャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からもブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化を行い、
さらに、前記アプリケーションプログラムは、前記ＣＰＵのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理としては何も行わず、
前記非リロケータブルコードでは、スタック領域の初期化、Ｃ／Ｃ＋＋非初期化データのゼロ初期化、例外・割込みベクタ設定、ヒープ領域の初期化、Ｃ＋＋の全広域変数のためのコンストラクタとイニシャライザの実行、全データキャッシュフラッシュ、全命令キャッシュクリアという処理系に合わせた初期化処理を行い、メインルーチン又はオペレーションシステムの初期化ルーチンへジャンプし、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ内の分岐・関数呼び出し・シンボル参照についてはプログラムカウンタの相対アドレス分岐命令を利用し、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ外の関数呼び出し・シンボル参照は、実行アドレスとリンクアドレスのオフセットを加算して分岐先・戻りアドレス計算、シンボル参照を行い、
前記ＣＰＵのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合、命令キャッシュとデータキャッシュのコヒーレンシを保ち、
前記ＣＰＵのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合で、マルチプロセッサであるとき、プロセッサ間のメモリコヒーレンシを保つ
ことを特徴とする請求項１に記載のプログラム。
【請求項６】
少なくとも１つのＣＰＵと、
リセットベクタが含まれるブート用メモリ領域を含み、前記ＣＰＵとは異なる部分から書き換えが可能な揮発性メモリ、または、置き換えが可能な不揮発性メモリと、
キャッシュ実行可能または非キャッシュ実行可能なアプリケーション実行用メモリ領域を含み、前記ＣＰＵの外部から書き換えが可能で、前記ＣＰＵからメモリコントローラの初期化及び読み書きが可能で、必要に応じ前記ＣＰＵとは異なる部分から前記メモリコントローラの初期化が可能である揮発性メモリ、または、初期化不可能又は不要な不揮発性メモリと
を備え、
オペレーションシステム、及び、オペレーションシステムを利用したアプリケーションが実行可能で、オペレーションシステムを使用しないフリースタンディングのアプリケーションも実行可能である装置に対するアプリケーションを作成する作成装置の情報処理方法おいて、
アプリケーションプログラム及びブートストラップは、ブートストラップのエントリポイントが、実行ファイルのエントリポイントとなるように、単一の実行ファイルとしてリンクし、
前記リンク先のファイルを入力とし、前記エントリポイント、前記ブートストラップ、前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域のアドレスにマップされるようにレイアウトを行い、実行ファイルを生成し、
前記レイアウトの際、前記アプリケーション実行用メモリ領域のアドレスは、前記ＣＰＵによってキャッシュされる領域、または、キャッシュされない領域であり、
前記実行ファイルは、前記レイアウトされたアドレスと、レイアウトされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記アプリケーションプログラムが、前記ブート用メモリ領域に初期配置される場合、前記実行ファイルの前記エントリポイントが対応する前記ブート用メモリ領域の前記リセットベクタへマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記アプリケーションプログラムが前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記ＣＰＵによってキャッシュされない領域である場合、前記実行ファイルをそのままロード用イメージファイルとして出力し、
前記実行ファイルが前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記ＣＰＵによってキャッシュされる領域である場合、ロードの際キャッシュの状態と関係なく確実にＲＡＭへロードするため、前記実行ファイルの前記エントリポイントがこの領域に対応する前記ＣＰＵの非キャッシュ領域へマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記ロード用イメージファイルには前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記ロード用イメージファイルとは異なるファイル形式が必要とされる場合、前記ロード用イメージファイルを入力として、前記必要とされる形式へ変換する
ことを特徴とする情報処理方法。
【請求項７】
前記実行ファイルが、前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納され、
前記ロード用イメージファイルが、前記ロードすべきアドレスとロードされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納されている
ことを特徴とする請求項６に記載の情報処理方法。
【請求項８】
前記アプリケーションプログラムを前記アプリケーション実行用メモリ領域に初期配置する場合、必要に応じて前記ＣＰＵとは異なる部分から初期化を行い、
初期配置すべきアドレスと初期配置すべきデータは、前記ロード用イメージファイルに格納されている前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップを利用し、前記ロード用イメージファイルを初期配置する領域へロードする
ことを特徴とする請求項６に記載の情報処理方法。
【請求項９】
前記アプリケーションプログラムが、前記ブート用メモリ領域にロードされている場合、そのまま前記ＣＰＵのリセットを解除し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、ブート領域以外からソフトウエアを起動できる場合、プログラムカウンタがロードされた前記エントリポイントを指すように書き換え、前記ＣＰＵの実行を開始し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、前記プログラムカウンタの書き換えが行えない場合、ロードされた前記エントリポイントへジャンプする命令を前記リセットベクタ中に書き込み、前記ＣＰＵのリセットを解除する
ことを特徴とする請求項６に記載の情報処理方法。
【請求項１０】
前記アプリケーションプログラムは、高級言語やアセンブラによりプログラミングされ、アブソリュート形式である非リロケータブルコードで構成され、
前記ブートストラップは、アブソリュート形式であるリロケータブルコードと非リロケータブルコードから構成され、前記リロケータブルコードから開始し、絶対アドレス分岐命令を利用して、前記非リロケータブルコード領域へジャンプし、前記非リロケータブルコードを実行し、
前記リロケータブルコードでは、ＣＰＵの初期化、データキャッシュの初期化と、起動するメモリ領域の違いに応じた処理を行い、
前記アプリケーションプログラムは、前記ブート用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化、メモリコントローラの初期化、前記アプリケーションプログラムのコード部及び初期化データを前記ブート用メモリ領域から前記アプリケーション実行用メモリ領域へコピーを行い、
また、前記アプリケーションプログラムは、前記ＣＰＵの非キャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からもブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化を行い、
さらに、前記アプリケーションプログラムは、前記ＣＰＵのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理としては何も行わず、
前記非リロケータブルコードでは、スタック領域の初期化、Ｃ／Ｃ＋＋非初期化データのゼロ初期化、例外・割込みベクタ設定、ヒープ領域の初期化、Ｃ＋＋の全広域変数のためのコンストラクタとイニシャライザの実行、全データキャッシュフラッシュ、全命令キャッシュクリアという処理系に合わせた初期化処理を行い、メインルーチン又はオペレーションシステムの初期化ルーチンへジャンプし、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ内の分岐・関数呼び出し・シンボル参照についてはプログラムカウンタの相対アドレス分岐命令を利用し、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ外の関数呼び出し・シンボル参照は、実行アドレスとリンクアドレスのオフセットを加算して分岐先・戻りアドレス計算、シンボル参照を行い、
前記ＣＰＵのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合、命令キャッシュとデータキャッシュのコヒーレンシを保ち、
前記ＣＰＵのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合で、マルチプロセッサであるとき、プロセッサ間のメモリコヒーレンシを保つ
ことを特徴とする請求項６に記載の情報処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプログラムおよび情報処理方法に関し、特に、ＣＰＵに内蔵または外部接続されたＲＯＭから自律起動する自律ブートと、外部ホストまたはデバッガからの制御によってファームウエアをＲＡＭにコピーし起動する他律ブートの両方のブート方法に対応し、プログラムを変更すること無しに、開発時や商品化時に一貫して用いることが好適なプログラムおよび情報処理方法に関する。
【０００２】
【従来の技術】
近年、さまざまな装置にシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）が組み込まれている。そのようなシステムＬＳＩは、基本的に、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ（例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））、およびＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）（入出力部）などの回路が、１個のＬＳＩに収められた構成とされている。
【０００３】
システムＬＳＩは、上述したようにさまざまな装置に組み込まれているが、例えば、家電製品、ＡＶ機器、ＯＡ機器、産業用機器、自動車などに組み込まれて、システムの制御やネットワーク制御、ユーザインターフェースの制御などに利用されている。システムＬＳＩに内蔵すべき機能は用途によって異なるため、特定用途向けの性格が強く、各種の用途に応じてきわめて多品種のシステムＬＳＩが開発されている。
【０００４】
一方では、汎用性の高い高機能ＣＰＵコアにメモリおよび汎用的なＩ／Ｏや周辺回路を組み合わせてワンチップ化し、かつ、外付けメモリや外付けＩ／Ｏによるシステムの拡張を可能にした高機能なシステムＬＳＩも作られている。
【０００５】
いずれのタイプのシステムＬＳＩにしても、パラレルＩ／Ｏ、シリアルＩ／Ｏ、コンパレータ付き入力ポート、カウンタ／タイマ、Ａ／Ｄ（Ａｎａｌｏｇ／Ｄｉｇｉｔａｌ）変換器、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）コントローラ、割り込みコントローラ、バスコントローラなどの汎用的な回路機能の他、ＰＷＭ（Ｐｕｌｓｅ  Ｗｉｄｔｈ  Ｍｏｄｕｌａｔｉｏｎ）コントローラ、ステッピングモータ・コントローラ、液晶表示器コントローラ、ＤＴＭＦ（Ｄｉａｌ  Ｔｏｎｅ  Ｍｕｌｔｉ  Ｆｒｅｑｕｅｎｃｙ）回路などの特定用途向けの周辺回路機能が必要に応じてＣＰＵおよびメモリとともにワンチップに組み込まれていることが多い。
【０００６】
ＣＰＵチップ、メモリチップ、および、複数の周辺回路チップを配線ボード上で組み合わせたボード・コンピュータと比較すると、システムＬＳＩの方が小型で低価格の装置を実現できることが多く、そのために、システムＬＳＩが使用されることが多い。
【０００７】
システムＬＳＩが動作する上で必要となるプログラムの記憶などに関することは、特許文献１に開示されている。
【０００８】
【特許文献１】
特開平５−２５７６９６号公報
【０００９】
【発明が解決しようとする課題】
システムＬＳＩにおいては、ＣＰＵに内蔵または外部接続されたＲＯＭから自律起動する自律ブートと、外部ホストまたはデバッガからの制御によってファームウエアをＲＡＭにコピーし起動する他律ブートなどがあるが、開発時や商品化時で、そのようなブート方式などの設計変更などがあると、再度の検証や性能評価などを行わなくてはならないといった課題があった。
【００１０】
本発明はこのような状況に鑑みてなされたものであり、設計変更などがあっても、再度の検証や性能評価などを行わなくても良いようにすることを目的とする。
【００１１】
【課題を解決するための手段】
本発明は、少なくとも１つのＣＰＵと、リセットベクタが含まれるブート用メモリ領域を含み、ＣＰＵとは異なる部分から書き換えが可能な揮発性メモリ、または、置き換えが可能な不揮発性メモリと、キャッシュ実行可能または非キャッシュ実行可能なアプリケーション実行用メモリ領域を含み、ＣＰＵの外部から書き換えが可能で、ＣＰＵからメモリコントローラの初期化及び読み書きが可能で、必要に応じＣＰＵとは異なる部分からメモリコントローラの初期化が可能である揮発性メモリ、または、初期化不可能又は不要な不揮発性メモリとを備え、オペレーションシステム、及び、オペレーションシステムを利用したアプリケーションが実行可能で、オペレーションシステムを使用しないフリースタンディングのアプリケーションも実行可能である装置に対するアプリケーションを作成する作成装置により作成されるプログラムまたは作成装置の情報処理方法であって、アプリケーションプログラム及びブートストラップは、ブートストラップのエントリポイントが、実行ファイルのエントリポイントとなるように、単一の実行ファイルとしてリンクし、リンク先のファイルを入力とし、エントリポイント、ブートストラップ、アプリケーションプログラムが、アプリケーション実行用メモリ領域のアドレスにマップされるようにレイアウトを行い、実行ファイルを生成し、レイアウトの際、アプリケーション実行用メモリ領域のアドレスは、ＣＰＵによってキャッシュされる領域、または、キャッシュされない領域であり、実行ファイルは、レイアウトされたアドレスと、レイアウトされるアプリケーションプログラム及びブートストラップが含まれ、アプリケーションプログラムが、ブート用メモリ領域に初期配置される場合、実行ファイルのエントリポイントが対応するブート用メモリ領域のリセットベクタへマップされるように、レイアウトされたアドレスをロードすべきアドレスへ、実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、アプリケーションプログラムがアプリケーション実行用メモリ領域に初期配置され、その配置される領域がＣＰＵによってキャッシュされない領域である場合、実行ファイルをそのままロード用イメージファイルとして出力し、実行ファイルがレイアウトされたアドレスとレイアウトされるアプリケーションプログラムが、アプリケーション実行用メモリ領域に初期配置され、その配置される領域がＣＰＵによってキャッシュされる領域である場合、ロードの際キャッシュの状態と関係なく確実にＲＡＭへロードするため、実行ファイルのエントリポイントがこの領域に対応するＣＰＵの非キャッシュ領域へマップされるように、レイアウトされたアドレスをロードすべきアドレスへ、実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、ロード用イメージファイルにはロードすべきアドレスと、ロードされるアプリケーションプログラム及びブートストラップが含まれ、ロード用イメージファイルとは異なるファイル形式が必要とされる場合、ロード用イメージファイルを入力として、必要とされる形式へ変換することを特徴とする。
【００１２】
前記実行ファイルが、レイアウトされたアドレスとレイアウトされるアプリケーションプログラム及びブートストラップを別々のファイルに分割されて格納され、ロード用イメージファイルが、ロードすべきアドレスとロードされるアプリケーションプログラム及びブートストラップを別々のファイルに分割されて格納されているようにすることができる。
【００１３】
前記アプリケーションプログラムをアプリケーション実行用メモリ領域に初期配置する場合、必要に応じてＣＰＵとは異なる部分から初期化を行い、初期配置すべきアドレスと初期配置すべきデータは、ロード用イメージファイルに格納されているロードすべきアドレスと、ロードされるアプリケーションプログラム及びブートストラップを利用し、ロード用イメージファイルを初期配置する領域へロードするようにすることができる。
【００１４】
前記アプリケーションプログラムが、ブート用メモリ領域にロードされている場合、そのままＣＰＵのリセットを解除し、アプリケーションプログラムが、アプリケーション実行用メモリ領域にロードされ、ブート領域以外からソフトウエアを起動できる場合、プログラムカウンタがロードされたエントリポイントを指すように書き換え、ＣＰＵの実行を開始し、アプリケーションプログラムが、アプリケーション実行用メモリ領域にロードされ、プログラムカウンタの書き換えが行えない場合、ロードされたエントリポイントへジャンプする命令をリセットベクタ中に書き込み、ＣＰＵのリセットを解除するようにすることができる。
【００１５】
前記アプリケーションプログラムは、高級言語やアセンブラによりプログラミングされ、アブソリュート形式である非リロケータブルコードで構成され、ブートストラップは、アブソリュート形式であるリロケータブルコードと非リロケータブルコードから構成され、リロケータブルコードから開始し、絶対アドレス分岐命令を利用して、非リロケータブルコード領域へジャンプし、非リロケータブルコードを実行し、リロケータブルコードでは、ＣＰＵの初期化、データキャッシュの初期化と、起動するメモリ領域の違いに応じた処理を行い、アプリケーションプログラムは、ブート用メモリ領域からブート可能で、起動するメモリ領域の違いによる処理として命令キャッシュの初期化、メモリコントローラの初期化、アプリケーションプログラムのコード部及び初期化データをブート用メモリ領域からアプリケーション実行用メモリ領域へコピーを行い、また、アプリケーションプログラムは、ＣＰＵの非キャッシュ領域としてマップされるアプリケーション実行用メモリ領域からもブート可能で、起動するメモリ領域の違いによる処理として命令キャッシュの初期化を行い、さらに、アプリケーションプログラムは、ＣＰＵのキャッシュ領域としてマップされるアプリケーション実行用メモリ領域からブート可能で、起動するメモリ領域の違いによる処理としては何も行わず、非リロケータブルコードでは、スタック領域の初期化、Ｃ／Ｃ＋＋非初期化データのゼロ初期化、例外・割込みベクタ設定、ヒープ領域の初期化、Ｃ＋＋の全広域変数のためのコンストラクタとイニシャライザの実行、全データキャッシュフラッシュ、全命令キャッシュクリアという処理系に合わせた初期化処理を行い、メインルーチン又はオペレーションシステムの初期化ルーチンへジャンプし、ブートストラップのリロケータブルコードにおいて、ブートストラップ内の分岐・関数呼び出し・シンボル参照についてはプログラムカウンタの相対アドレス分岐命令を利用し、ブートストラップのリロケータブルコードにおいて、ブートストラップ外の関数呼び出し・シンボル参照は、実行アドレスとリンクアドレスのオフセットを加算して分岐先・戻りアドレス計算、シンボル参照を行い、ＣＰＵのキャッシュ領域としてマップされるアプリケーション実行用メモリ領域からブートする場合、命令キャッシュとデータキャッシュのコヒーレンシを保ち、ＣＰＵのキャッシュ領域としてマップされるアプリケーション実行用メモリ領域からブートする場合で、マルチプロセッサであるとき、プロセッサ間のメモリコヒーレンシを保つようにすることができる。
【００１６】
本発明においては、ブート方法のいずれにおいてもアプリケーションプログラム及びブートストラップを変更すること無しに、開発時・商品化時に利用でき、アプリケーションの実行装置及び実行環境を満たしていれば、ブート用メモリ領域に対応する物理デバイスが不揮発性または揮発性のどちらが決定する前であっても、アプリケーションプログラムの開発が行え、ブートメモリ領域がＲＯＭである場合、ＲＯＭを書き換えるかＲＯＭ  ＩＣＥを利用するなどしないと通常ファームウエアの変更が出来ないが、これらの煩雑な作業無しに、アプリケーション実行用メモリ領域からブート可能になるようなプログラムが作成される
【００１７】
【発明の実施の形態】
以下に、本発明の実施の形態について図面を参照して説明する。本発明は、複数の構成に対して１つのプログラムで対応できることを１つの特徴とする。まず、その複数の構成について説明する。ここで、複数の構成とは、システムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）を中心とした構成であり、システムＬＳＩの開発時から実用時までのことを考慮すると、図１乃至図６に示すような構成が考えられる。
【００１８】
システムＬＳＩのプログラムは、通常、ＣＰＵと同一のチップに収められた内蔵又は外付けＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）（プログラムメモリなどと称される場合がある）に格納され、電源投入とともに、そのＲＯＭ内のプログラムがリセットベクタ（または始動アドレス）から順に実行される。そこでまず、システムＬＳＩに対してＲＯＭが内蔵されているか否かで、その構成を分けることができる。
【００１９】
以下の説明において“内蔵”とは、システムＬＳＩと同一のチップ内に備えられている場合を意味し、“外付け”または“外部”とは、システムＬＳＩのチップとは別に設けられていることを意味する。
【００２０】
図１乃至図３は、内蔵ＲＯＭ型の構成をそれぞれ示し、図４乃至図６は、外付けＲＯＭ型のそれぞれ構成を示すブロック図である。
【００２１】
図１に示したシステムＬＳＩ１−１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２―１、ＲＡＭ３−１、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）４−１、および、ＲＯＭ５−１を内蔵した構成とされている。
【００２２】
システムＬＳＩ１―１は、ホストコンピュータ１１と外部バス１２−１を介してデータの授受を行えるように構成されている。また、システムＬＳＩ１―１は、外部バス１２−２を介して、外部ＲＡＭ１３（システムＬＳＩ１−１に内蔵されているＲＯＭ５−１と区別するために、“外部”という文字を付す）と、データやアドレスデータの授受を行えるように構成されている。
【００２３】
図２に示したシステムＬＳＩ１−２も、図１と同様に、ＣＰＵ２―２、ＲＡＭ３−２、Ｉ／Ｏ４−２、および、ＲＯＭ５−２を内蔵した構成とされている。そして、ホストコンピュータ１１と外部バス１２−１を介してデータの授受が行えるように構成されている。また、システムＬＳＩ１−２は、外部バス１２−１を介して、外部ＲＡＭ２１や外部ＲＯＭ２２と、データやアドレスデータの授受を行える構成とされている。
【００２４】
また、図２に示した構成においては、モード切替スイッチ２３とモード切替制御装置２４が設けられており、そのモード切替スイッチ２３の操作に基づいて、モード切替制御装置２４がモードの切替を行うように構成されている。なお、モードについては後述する。
【００２５】
図３に示した構成においても、モードの切替が行える構成とされている。その構成について説明するに、図３に示した構成におけるシステムＬＳＩ１−３は、図１や図２に示した構成と同様に、ＣＰＵ２―３、ＲＡＭ３−３、Ｉ／Ｏ４−３、および、ＲＯＭ５−３を内蔵した構成とされている。
【００２６】
図３に示した構成においても、モードの切替が行える構成とされているが、モードが、モード切替スイッチ２３とモード切替制御装置２４の制御により切り換えられるとき、アドレスデータは、メモリマッピング変換回路３１の制御により生成される構成とされている。また、図３に示した構成においては、外部バス１２−２を介して、ＩＣＥ（Ｉｎ  −  Ｃｉｒｃｕｉｔ  Ｅｍｕｌａｔｏｒ  ）３２などと称されているマイクロコンピュータ開発支援装置とデータの授受が行える構成とされている。
【００２７】
なお、図３においては、ＩＣＥ３２とデータの授受が行える構成としたが、ＩＣＥ３２の代わりに（開発が終了し、実用化される時点で）、ホストコンピュータ１１とデータの授受が行える構成に変更されても良い。
【００２８】
図４は、内蔵ＲＯＭを有しない構成とされている。具体的には、システムＬＳＩ１−４は、ＣＰＵ２−４、ＲＡＭ３−４、および、Ｉ／Ｏ４−４を備えるが、ＲＯＭを備えていない構成とされている。また、システムＬＳＩ１−４は、外部バス１２−２を介して外部ＲＡＭ２１や外部ＲＯＭ２２とデータの授受などを行えるように構成されている。
【００２９】
図５に示した構成のうちシステムＬＳＩ１−５の構成は、図４と同様に、ＣＰＵ２−５、ＲＡＭ３−５、および、Ｉ／Ｏ４−５から構成されている。図５に示した構成では、モード変換を行うためのモード切替スイッチ２３、モード切替制御装置２４を備える。また、モード切替制御装置２４の制御に基づき、外部ＲＡＭ２１との間で用いられるアドレスデータの生成を行うメモリマッピング変換回路４１と、外部ＲＯＭ２２との間で用いられるアドレスデータの生成を行うメモリマッピング変換回路４２を備える。
【００３０】
図６に示した構成は、図１に示した構成と比較し、システムＬＳＩ１−６が、内蔵ＲＯＭを備えない構成とされている（ＲＯＭ５−１を削除された構成とされている）他は、基本的に同様である。また、図６に示した構成では、システムＬＳＩ１−６が外部バス１２−２を介してＩＣＥ３２（またはホストコンピュータ１１）とデータの授受を行える構成とされている。
【００３１】
このような図１乃至図６に示したような構成が考えられるが、それらの構成は、以下に示すような状況を鑑みて、適宜使い分けられる。
【００３２】
民生機器などの量産品に組み込まれるシステムＬＳＩは、マスクＲＯＭを内蔵するタイプ（例えば、図１のＲＯＭ５−１がマスクＲＯＭとされる）、又は、マスクＲＯＭが外付されているタイプ（例えば、図４に示すような内蔵ＲＯＭを備えない構成）であり、開発評価済みのプログラムがマスクＲＯＭの形でチップ製造時に内蔵または外部に固定化されるのが一般的である。
【００３３】
一方、開発評価段階ではプログラムＲＯＭの書き込みや消去ができることが必要なので、書き込みや消去が可能なＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）内蔵タイプ（例えば、図１のＲＯＭ５−１がＥＰＲＯＭとされる）、または、内蔵ＲＯＭを取り除き代替のＥＰＲＯＭやＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を外付けするＲＯＭレスタイプ（例えば、図４や図６に示した構成とされる）が使用されている。少量生産品の場合、マスクＲＯＭにせずに、ＥＰＲＯＭ内蔵タイプやＲＯＭレスタイプのシステムＬＳＩが最終製品として使用されることもある。
【００３４】
システムＬＳＩの供給メーカは、多くの場合、マスクＲＯＭ内蔵タイプに付随したシリーズ製品として、ＥＰＲＯＭ内蔵タイプ、あるいは、ＲＯＭレスタイプの製品を用意している。プログラムメモリが内部にあるか外部にあるかに関わりなく、電源投入リセット時にプログラムメモリのリセットベクタがアクセスされ、そこにある先頭命令からプログラムが実行される。
【００３５】
主記憶を外部に拡張できる高機能システムＬＳＩでは、起動時に内蔵ＲＯＭのプログラムを実行する通常の動作モード（以下、内部モードと記述する）の他に、外部モードと称する動作モードに切り替えられる機種がある。外部モードが選択されると内蔵ＲＯＭが無効とされ、内部モードでは内蔵ＲＯＭに割り付けられていたアドレス空間も外部メモリに解放される。
【００３６】
すなわち、外部モードにされて起動されると、上述したＲＯＭレスタイプと同様に、外付けされたプログラムメモリのリセットベクタにアクセスされ、そこにある先頭命令からプログラムが実行される。例えば、図２や図３に示した構成において、ＲＯＭ５−２またはＲＯＭ５−３にアクセスされるのではなく、外部ＲＡＭ２１にアクセスされるような処理が行われる。
【００３７】
従って、外部モードでプログラムの開発評価が行なわれ、プログラムが完成した段階でそのプログラムを内蔵ＲＯＭに固定化し内部モードで動作させる、といった使い方が行われるときもある。
【００３８】
一方、ＲＯＭレスタイプにおいても、外部ＲＯＭの書き換えが行えないＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）が利用されている場合や、書き換えが容易でない場合は、外部バス上にメモリマップ変換回路が接続され、上述の内部／外部モードの切替を実現されるようになっている（例えば、図５に示した構成において実現される）。
【００３９】
ここで、さらに、システムＬＳＩ１―１乃至１−６（以下の説明において、システムＬＳＩ１−１乃至１−６を、個々に区別する必要がない場合、単に、システムＬＳＩ１と記述する。他の部分に関しても同様に記述する）におけるソフトウェアの開発環境について説明する。
【００４０】
プログラミングは、一般的に、アセンブラ言語あるいはコンパイラ言語を使用して行われ、ソースプログラムは、一般的に、パーソナルコンピュータ上で動作するクロス・アセンブラ、あるいは、コンパイラによって機種ごとのオブジェクトプログラムに変換される。
【００４１】
開発されたプログラムのテストおよびデバッグは、ホスト・コンピュータの統括下においてターゲットモニタ、ＩＣＥ（インサーキット・エミュレータ）、統合開発環境デバッガなどが用いられて行なわれる。このような開発ツールは、個々のシステムＬＳＩ１の機種ごとに、メーカやサードパーティなどから提供される。
【００４２】
ＵＮＩＸ（Ｒ）などのオペレーティング・システムを組み込んだアプリケーションプログラムの開発と異なり、システムＬＳＩ１の場合、電源投入リセット時に実行される最初の命令（エントリポイント）から論理的に連続した形のメインプログラム全体が作成されることになる。もちろん、リロケータブル形式のサブルーチンが多数使用されてメインプログラムが開発されるが、最終的には、クロス・アセンブラ、または、コンパイラにより各ルーチンがリンクされて、プログラムメモリの前記リセットベクタに、先頭命令を合せたアブソリュート形式のメインプログラムが作成される。
【００４３】
コンピュータ・システムは、コールド・スタート後にプログラムの実行を開始するために、何らかの手段を持っていなければならない。通常、ＣＰＵ２のハードウエア・アーキテクチャは、全てのハードウエア回路を既知の電気的な状態に設定するリセット処理を備えている。しかしながら、ＣＰＵ２に所望のプログラムの実行を開始させることは必要である。
【００４４】
例えば、開始時にいくつかのコンピュータ・システムは、「ブートストラップ」又は「ブートストラップ・ローダー」プログラムや「ＢＩＯＳ」プログラムを読み込むように構成されることになっている。このブートストラップ・プログラムは、所望のアプリケーションプログラムの先頭にある他のシーケンスの命令をロードし、その実行を開始させる簡単なプログラムである。ブートストラップ・プログラムは単に「ブート」ソフトウエアと称されるときもある。
【００４５】
例えば、インテル社（商標）のインテル８０ｘ８６系マイクロプロセッサは、ハードウエア・リセットの後、特定のメモリアドレスからプログラムの実行を開始するようにされている。即ち、マイクロプロセッサは、そのメモリ位置（アドレス）の内容を読み出し、そこで検出するビットを、マイクロプロセッサ命令として実行しようとする。
【００４６】
８０ｘ８６ファミリにより用いられる特定メモリ位置は、ＸＸＸＦＦＦＦ０ｈ、即ち、メモリ空間の先頭からの１６ビットである。他のマイクロプロセッサでは、異なる開始アドレスを用いることもできるが、同様の原則が適用できる。従って、マイクロプロセッサは、このアドレスに分岐（又は条件分岐）命令を見つけると、どのようなアドレスが指定されようとも、そのプログラムの実行を継続する。従って、この初期目標アドレスは、あらゆる使用セッションのためのエントリポイントであり、以下の説明においては、これをリセットベクタと、適宜、記述する。
【００４７】
通常、このリセットベクタはコンピュータを使用する度に実行が必要であり、このリセットベクタには、ブートストラップのエントリポイントが割り当てられる。
【００４８】
図１乃至図６に示したように、システムＬＳＩ１を含む構成としてはさまざまな構成が考えられ、それらの構成は、ソフトウェアの開発環境などを考慮した上で必要とされるわけだが、そのようなさまざまな構成を有することになると、以下のような問題点がある。本発明は、そのような問題点を解決する方法を提供することを１つの目的としている。以下に、問題点とあわせて、本発明についてさらに説明を加える。
【００４９】
まず、以下に説明を加える本発明で実現できることについて説明する。本発明を適用することにより、豊富な周辺回路を含んだ超小型で安価なシステムＬＳＩをパーソナルコンピュータのような環境で動作させ、フラッシュメモリやメモリカードあるいはフロッピー（Ｒ）ディスク装置といった大容量の補助記憶装置から各種のアプリケーションプログラムを随時読み込んで実行できるようにしたコンピュータ装置を実現する。
【００５０】
使用されるシステムＬＳＩ１専用の既存の開発ツールによって作成された前述のアブソリュート形式のメインプログラムを、そのままアプリケーションプログラムとして利用可能にする。
【００５１】
それに加えて、図１乃至図３に示した構成のように、システムＬＳＩ１に内蔵されているＲＯＭ５から、自律起動する「自律ブート」と、図４乃至図６に示した構成のように、システムＬＳＩ１にＲＯＭを含まないＲＯＭレスタイプまたは外部モード時に外部ホストやデバッガからの制御によってファームウエアをＲＡＭにコピーし起動する「他律ブート」の両方のブート方法を、プログラムを変更すること無しに利用できる。
【００５２】
これは同時に、システムＬＳＩ１のプログラムメモリやブート用メモリ領域に対するデバイスの決定する前の段階からアプリケーションの開発が出来るだけでなく、開発時のコードを変更することなく商品に利用できることを意味する。このように本発明を適用することにより、システムＬＳＩ１とアプリケーションの協調設計がシームレスに行えるようになる。
【００５３】
また、ブートメモリ領域がＲＯＭ５である場合、ＲＯＭ５を書き換えるかＲＯＭ  ＩＣＥを利用するなどしないと、通常、ファームウエアの変更が出来ない。特にＥＰＲＯＭを内蔵しているようなタイプの場合、ＲＯＭ  ＩＣＥが利用できないため、ＲＯＭ５の内容を書き換える煩雑な作業が必要であるが、本発明を適用することによりファームウエアの変更無しに他律ブートが利用でき、セット開発時のファームウエアやデバイスの初期化コード修正など、頻繁なファームウェアイメージの変更に柔軟に対応することができる。
【００５４】
このようなことを実現するためには、フローチャートなどを参照して説明する本発明を適用しなくても、システムＬＳＩの一般的な利用方式の延長上として、以下に記載するような形で実現することも考えられるが、問題点があり現実的でない。しかしながら、本発明との差異を明らかにするため、また、本発明の利点を説明するために、ここで、システムＬＳＩの一般的な利用方式の延長上として実現した場合についての説明と、その問題点について記載する。
【００５５】
例えば、ハードウエアとしては、メモリやＩ／Ｏを外部に拡張可能な高機能システムＬＳＩを使用し、これに相当容量のＲＡＭを外付けして主記憶を拡張するとともに（外付けした主記憶ＲＡＭを外部ＲＡＭとする）、不揮発性で大容量の補助記憶装置としてフラッシュメモリなどを結合する（例えば、図２に示しような構成となる）。
【００５６】
また、ワンチップ・マイコンの内蔵ＲＯＭには、つぎのようなオペレーティング・システム（ＯＳ）的な機能をもったシステム・プログラムを格納しておく。ここでのＯＳ的な機能とは、補助記憶装置からアプリケーションプログラムを読み出して前記外部ＲＡＭに転送した後、外部ＲＡＭ上のそのアプリケーションプログラムにジャンプする機能である。この機能をアプリケーションプログラム・ローダと、以下、適宜称する。
【００５７】
以上の構成において、アプリケーションプログラムは、別のプロセスにより前記補助記憶装置の所定エリアに予め格納しておく。前記のシステムＬＳＩ装置に電源を投入すると、内蔵ＲＯＭの前記システム・プログラムが、リセットベクタ（０番地とする）から実行され、まず、必要なイニシャライズ・ルーチンが実行される。その後、自動的に（継続動作として）、あるいは、外部からの指令信号を待って前記アプリケーションプログラム・ローダが実行される。
【００５８】
そのような処理が実行されると、補助記憶装置内の所定のアプリケーションプログラムが外部ＲＡＭに転送された後、自動的または外部指令信号を待って、外部ＲＡＭ上のアプリケーションプログラムにジャンプされる。このことによりアプリケーションプログラムが実行されることになる。アプリケーションプログラムには前記システム・プログラムに適時復帰する機能を持たせておく。
【００５９】
しかしながら、このようなシステムでは、ＣＰＵのアドレス空間における０番地（リセットベクタアドレス）から連続した一定の領域に、内蔵ＲＯＭが格納されている（システム・プログラムの先頭命令が０番地にセットされている）。このシステム・プログラム中のアプリケーションプログラム・ローダの実行によって補助記憶装置から外部ＲＡＭに転送されるアプリケーションプログラムのＣＰＵのアドレス空間上の位置は、当然ながらシステム・プログラムの格納領域（内蔵ＲＯＭ領域）ではなく、外部拡張領域（外部ＲＡＭ領域）である。
【００６０】
すなわち、アプリケーションプログラムは外部拡張領域のｘ番地以降に書き込まれ、ｘ番地にセットされている先頭命令にジャンプすることで当該アプリケーションプログラムが実行される。
【００６１】
従って、アプリケーションプログラムは、先頭命令を０番地に合せたアブソリュート形式ではなくて、主記憶上の位置を特定していないリロケータブル形式で作成されているか、０番地とは異なる特定のｘ番地に先頭命令を合せたアブソリュート形式で作成されていなければならない。リロケータブル形式を作成する場合については、システムＬＳＩの各機種ごとに用意されている専用開発ツールで作成したアプリケーションプログラムをそのまま利用できないことを意味している。
【００６２】
それにもかかわらず任意のｘ番地以降に置いて正常に動作するリロケータブル形式の任意のアプリケーションプログラムを作成することはもちろん可能である。ただし、メーカーから供給されている各ワンチップ・マイコン専用の開発ツールで作成したプログラムはそのままでは使えない。あえて使おうとするのであれば、プログラム中のアドレス関連情報をすべて改変する必要がある。これをアプリケーションプログラム全体に対して正確に行うことは非常に難しいし、膨大な作業時間を要する。
【００６３】
また、開発ツールを改変するか新規に作れば、任意のｘ番地に置いて正常に動作する形式のプログラムを作成できるが、システムＬＳＩの１ユーザが開発ツール自体を作るなどということは、手間がかかりすぎるなど、現実的な問題の解決方法とはならない。さらに、既存の開発ツールで作成されて使用実績のあるシステムＬＳＩ用プログラムをライブラリー化しておき、それらを前記のアプリケーションプログラムとして再利用することが、前記と同じ理由でできない。このことは、利便性の低下、アプリケーションプログラムの開発力の低下などを引き起こし、好ましくない。
【００６４】
一方、０番地とは異なる特定のｘ番地に先頭命令を合せたアブソリュート形式のアプリケーションプログラムを作成することについては、多くの開発ツールで行うことが可能であるが、このような場合においても、開発中のプログラムを商品化するにあたり変更が必要となるために、サイズ再見積もりや検証のやり直しが必要となり、効率的ではない。
【００６５】
例えば、開発の初期ではＲＯＭレスタイプを利用して開発を進めていることが多いが、途中でＥＰＲＯＭ内蔵タイプやマスクＲＯＭ内蔵タイプに変更されることがある。このような場合、単に０番地とは異なる特定のｘ番地に先頭命令を合せただけのアブソリュート形式でアプリケーションプログラムを作成した場合、ブート用メモリ領域であるＲＯＭ領域のレイアウト変更に伴って、アプリケーションプログラムについてもレイアウトし直すなどの変更が加わる。そのため実行ファイルにおいて、分岐先アドレスの変更、ＲＯＭからＲＡＭへのコピーを行うコードの追加、レイアウト順序の変更など予期しない変更が加わる。そのため、一般的には検証や性能評価をやり直さなければならない。
【００６６】
しかしながら、以下に説明を加える本発明を適用することにより、このような問題を解決しつつ、上述したような目的を達成することができる。
【００６７】
図７のフローチャートを参照し、本発明におけるアプリケーションのブート方式（ブートストラップの処理）について説明する。なお、簡便に全体的な流れを説明し、その後図１乃至図６に示した各構成において、どのように動作するかを、具体的に説明する。
【００６８】
ステップＳ１１において、エントリポイントからの実行が開始される。このステップＳ１１における処理としては、ブートストラップのエントリポイント（Ｒｅｓｅｔ）から実行が開始される場合（以下、適宜、通常の処理と記述する）の他に、さらに２つの処理がオプション（必ずしも実行されなくても良く、適宜、必要に応じて実行されれば良いという意味で“オプション”と記述する）として実行される処理がある。
【００６９】
１つ目のオプション（以下、適宜、オプション１と記述する）として、非キャッシュＲＡＭ領域（０ｘＡ０００００００）へジャンプした後、ブートストラップのエントリポイントから実行が開始されるようにしても良い。ジャンプするだけのコードをブート領域に配置することにより実現することが可能である。このようなオプション１の処理は、ＩＣＥ等がなくＰＣ（Ｐｒｏｇｒａｍ  Ｃｏｕｎｔｅｒ）に対して変更が施せない場合などに必要とされる処理である。
【００７０】
２つ目のオプション（以下、適宜、オプション２と記述する）として、非キャッシュＲＡＭ領域（０ｘＡ０００００００）へジャンプした後、ブートストラップのエントリポイントから実行が開始されるようにしても良い。非キャッシュＲＡＭ領域（０ｘＡ０００００００）へＰＣをセットすることにより実現することが可能である。このようなオプション２の処理は、ホストＣＰＵがなく、ＩＣＥが備えらているような場合などに必要とされる処理である。
【００７１】
なお、このステップＳ１１の処理が行われる前提条件として、本ブートストラップを含むプログラム全体がＲＯＭ領域へ事前にロード、または、ＲＯＭにプログラムされている必要がある。但し、上述したオプション１またはオプション２が実行される場合、ＲＯＭ領域ではなくＲＡＭ領域へロードされる必要がある。
【００７２】
また、オプション１またはオプション２は、ブートストラップ本体で行われる処理ではない（本体で行われなくても良い）。よって、オプション１またはオプション２による処理は、図７のフローチャートの処理としては図示していない。次の２つの場合分けで、オプション１またはオプション２の処理が、実行可能な場合と不可能な場合に分ける。
【００７３】
まず、実行可能な場合について説明する。実行可能な場合、リセットベクタとプログラム領域が（異なるまたは同一の）物理デバイスの異なるアドレスにマップされるときである。高速ブートを行う場合や、ＲＯＭ領域への煩雑なプログラミングを省略するために用いられる。そのような目的がない場合、ＣＰＵ（図１乃至図６においてはＣＰＵ２―１乃至２−６）本来のリセットベクタから処理が開始される（上述した通常の処理：オプション１，２ではない処理）。
【００７４】
実行が不可能な場合は、リセットベクタとプログラム領域が物理的に同一のデバイスにマップされ、２つの領域が物理デバイス上の同一のアドレスにマップされるときである。このようなときには無限にジャンプすることになるので実行してはならない。ＣＰＵ２本来のリセットベクタから処理が開始される（すなわち、上述した通常の処理）必要がある。
【００７５】
本発明では、リセットベクタとプログラム領域が物理的に同一のデバイスにマップされる場合にも適用できる。
【００７６】
ステップＳ１２の処理として、ブートストラップ本体（＿ｒｅｓｅｔ）へジャンプの処理が実行される。このステップＳ１２における処理では、リセットベクタとプログラム領域が物理的に重複する／しないに応じてプログラム上は、条件コンパイルで２通りの処理が選択される
【００７７】
１つの処理として、リセットベクタとプログラム領域が物理的に重複しない場合は、ＰＣ相対アドレス分岐命令が利用され、実行がリンクされた仮想アドレス空間のセグメントに移行させない。すなわち、ＰＣ＋０ｘ４００へジャンプされる。
【００７８】
他の処理として、リセットベクタとプログラム領域が物理的に重複する場合は、絶対アドレス分岐命令が利用され、実行がリンクされた仮想アドレス空間の非キャッシュセグメント、すなわち、非キャッシュＲＡＭ領域（０ｘＡ００００４００）へ移行させる。
【００７９】
ステップＳ１３の処理として、ＣＰＵ２が初期化される。このステップＳ１３の処理としては、ＣＰＵコンフィグ  （ｃｏｎｆｉｇ）、ＳＷ割込みクリア  （ｃａｕｓｅ）、ＣＰＵ  Ｔｉｍｅｒ初期化  （ｃｏｍｐａｒｅ）、および、割込み禁止、ＢＥＶ＝１  （ｃａｕｓｅ）という処理が含まれる。
【００８０】
ステップＳ１４の処理として、データキャッシュの初期化が行われる。そして、ステップＳ１５の処理として、キャッシュＲＡＭ上で実行されているか否かが判断される。ステップＳ１５において、キャッシュＲＡＭ上で実行されていると判断された場合、ステップＳ２１に処理が進められ、キャッシュＲＡＭ上で実行されていないと判断された場合、ステップＳ１６に処理が進められる。
【００８１】
ステップＳ１６において、命令キャッシュの初期化が行われ、ステップＳ１７において、非キャッシュＲＡＭ上で実行されているか否かが判断される。ステップＳ１７において、非キャッシュＲＡＭ上で実行されていると判断された場合、ステップＳ２１に処理が進められ、非キャッシュＲＡＭ上で実行されていないと判断された場合、ステップＳ１８に処理が進められる。
【００８２】
なお、ステップＳ１６とステップＳ１７の処理は、非キャッシュＲＯＭまたは非キャッシュＲＡＭで実行される。
【００８３】
ステップＳ１８において、ＲＯＭレスタイプであるか否か、または、外部モードであるか否かが判断される。ステップＳ１８における判断は、結果的には、システムＬＳＩ１内のＲＯＭ５上で、処理が実行されているか否かの判断が行われることになる。ステップＳ１８において、ＲＯＭレスタイプである、または、外部モードであると判断された場合、ステップＳ２０に処理が進められ、ＲＯＭレスタイプではなく、また、外部モードではない（内部モードである）と判断された場合、ステップＳ１９に処理が進められる。
【００８４】
ステップＳ１９において、ＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）  Ｃｏｎｔｒｏｌｌｅｒ  の初期化が行われる。なお、ステップＳ１９の処理は、ステップＳ１８においてＲＯＭレスタイプである、または、外部モードであると判断されたときには行われないが、ＲＯＭレスタイプまたは外部モードのときには、モードをＣＰＵ２が判別できるように構成されている必要はある。
【００８５】
ステップＳ２０において、ＲＯＭからＲＡＭへのデータのコピーが行われる。コピーされるデータとしては、プログラムコード（．ｔｅｘｔ）、Ｃ／Ｃ＋＋初期化データ（．ｒｏｄａｔａ  ．ｄａｔａ，  ．ｓｄａｔａ）などである。ステップＳ２０において行われるデータのコピーの方法は、２通りある。そして、その方法は、プリプロセッサマクロで指定可能である。
【００８６】
高速な方法としては、コピー先のＲＡＭをキャッシュ領域（フラッシュ付）とする方法があり、一般的な方法としては、コピー先のＲＡＭを非キャッシュ領域とする方法（デフォルト）がある。
【００８７】
ステップＳ２１において、キャッシュＲＡＭ領域へジャンプするための処理が行われる。このステップＳ２１以降の処理は、キャッシュＲＡＭで実行される。ステップＳ２２において、スタックの初期化やデータの初期化が行われる。具体的には、ＧＰレジスタの初期化、スタック領域の初期化、スタックポインタレジスタの初期化、Ｃ／Ｃ＋＋非初期化データ（．ｓｂｓｓ，  ．ｂｓｓ）をゼロで初期化するなどの処理が行われる。
【００８８】
なお、スタック領域の初期化は、デフォルトでは省略されるがデバッグ目的で行なわれるようにしても良い。また、Ｃ／Ｃ＋＋非初期化データ（．ｓｂｓｓ，  ．ｂｓｓ）をゼロで初期化は、本ブートストラップ実行前に．ｓｂｓｓ，  ．ｂｓｓ領域をゼロ初期化している場合は省略することが可能な処理である。
【００８９】
ステップＳ２３において、ブートストラップ終了後のための例外や割込みに対するベクタの設定が行われる。そして、ステップＳ２４において、ヒープ領域がゼロで初期化される。ステップＳ２５において、Ｃ＋＋の全広域変数のためのコンストラクタとイニシャライザが実行され、ステップＳ２６において、全データのキャッシュがフラッシュされる。
【００９０】
ステップＳ２７において、全命令のキャッシュがクリアされ、ステップＳ２８において、ブートストラップ終了（ＢＥＶ＝０）され、割込みが許可された状態にされ、ステップＳ２９において、カーネル初期化、または、メインへのジャンプが行われる。
【００９１】
このようなブートストラップ処理が行われる。このようなブ−トストラップの処理を実行するアプリケーションプログラム（実行ファイル）の構成について、図８を参照して説明する。
【００９２】
実行ファイル５１は、ブートストラップ部５２とアプリケーション部５３とに分けられる。ブートストラップ部５２は、リロケータブルコード部５４と非リロケータブルコード部５５から構成される。アプリケーション部５６は、非リロケータブルコード部５６から構成される。なお、リロケータブルコードと非リロケータブルコードのどちらもアブソリュート形式でコンパイルされたものでよい。
【００９３】
ブートストラップ部５２のリロケータブルコード部５４は、エントリポイント５７、ジャンプ・アクセスコード５８，５９、ブートストラップ内サブルーチン６０、および、ジャンプコード６１を含む。
【００９４】
エントリポイント５７は、リセットベクタ（ＬＭＡ）とＲＡＭ領域の先頭（ＶＭＡ）のデータを含む。ジャンプ・アクセスコード５８は、ブートストラップ部５２内のアドレスをＰＣ（プログラムカウンタ）相対により解決し、ジャンプし、アクセスするためのコードである。ジャンプ・アクセスコード５９は、ブートストラップ部５２外のアドレスを解決し、ジャンプし、アクセスするためのコードである。
【００９５】
このジャンプ・アクセスコード５９のブートストラップ部５２外のアドレスの解決は、ＪＡＬ（）マクロと、ＬＡ（）マクロが用いられる。ＪＡＬ（）マクロは、次式（１）または次式（２）で表される。
ｊｕｍｐ＿ａｄｒ＿ａｄｓ＝ＶＭＡ（ｊｕｍｐ＿ａｄｒ）―ＶＭＡ（ＰＣ）＋ＰＣ
ＪＡＬ（ｊｕｍｐ＿ａｄｒ）＝ＪＵＭＰ（ｊｕｍｐ＿ａｄｒ＿ａｄｓ）・・・（１）
式（１）において、ＶＭＡ（）は、仮想メモリアドレスを求めることを示し、ＪＵＭＰ（）は、絶対アドレス分岐命令であることを示す。
【００９６】
ｊｕｍｐ＿ａｄｒ＿ａｄｓ＝ＶＭＡ（ｊｕｍｐ＿ａｄｒ）―ＶＭＡ（ｅｎｔｒｙ＿ａｄｒ）＋ＬＭＡ（ｅｎｔｒｙ＿ａｄｒ）
ＪＡＬ（ｊｕｍｐ＿ａｄｒ）＝ＪＵＭＰ（ｊｕｍｐ＿ａｄｒ＿ａｄｓ）・・・（２）
式（２）において、ＶＭＡ（）とＪＵＭＰ（）は、式（１）と同じ意味であり、ＬＭＡ（）は、ロードメモリアドレスを求めることを示している。
【００９７】
ＪＡＬ（）マクロは、式（１）または式（２）に示す計算式によりジャンプ先アドレスｊｕｍｐ＿ａｄｒ＿ａｂｓを計算し、絶対アドレス分岐命令によってジャンプするためのマクロである。
【００９８】
ＬＡ（）マクロは、次式（３）または次式（４）で表される。
Ｌｏａｄ＿ａｄｒ＿ａｄｓ＝ＶＭＡ（ｌｏａｄ＿ａｄｒ）―ＶＭＡ（ＰＣ）＋ＰＣ
ＬＡ（ｒｅｇ，ｌｏａｄ＿ａｄｒ）＝ＬＯＡＤ（ｒｅｇ，ｌｏａｄ＿ａｄｒ＿ａｄｓ）・・・（３）
式（３）において、ＶＭＡ（）は、仮想メモリアドレスを求めることを示している。ＬＯＡＤ（）は、絶対アドレスロード命令を示している。
【００９９】
Ｌｏａｄ＿ａｄｒ＿ａｄｓ＝ＶＭＡ（ｌｏａｄ＿ａｄｒ）―ＶＭＡ（ｅｎｔｒｙ＿ａｄｒ）＋ＬＭＡ（ｅｎｔｒｙ＿ａｄｒ）
ＬＡ（ｒｅｇ，ｌｏａｄ＿ａｄｒ）＝ＬＯＡＤ（ｒｅｇ，ｌｏａｄ＿ａｄｒ＿ａｄｓ）・・・（４）
式（４）において、ＶＭＡ（）とＬＯＡＤ（）は、式（３）と同じ意味であり、ＬＭＡ（）は、ロードメモリアドレスを求めることを示している。
【０１００】
ＬＡ（）マクロは、式（３）または式（４）に示した計算式によりロードアドレスｌｏａｄ＿ａｄｒ＿ａｂｓを計算し、ロード命令によって指定レジスタへメモリ内容をロードするためのマクロである。
【０１０１】
ブートストラップ内サブルーチン６０（図８）は、ブートストラップ部５２内で、繰り返し行われる機能などが書き込まれる。ジャンプコード６１は、ブートストラップ部５２の非リロケータブルコード部５５のジャンプアクセスコード６２にジャンプするためのコードが書き込まれる。
【０１０２】
このようなデータから構成されるリロケータブルコード部５４は、少なくとも、ステップＳ１１乃至Ｓ２１までの処理において、全てリロケータブルなコードになるように分岐命令がコーディングされているようにする。また、ブートストラップ本体（ｃｒｔ０．ｓ）内の分岐、関数呼び出し、シンボル参照は、上述したように、ＰＣ相対アドレス分岐命令が利用される。
【０１０３】
ブートストラップ本体（ｃｒｔ０．ｓ）外の関数呼び出し・シンボル参照は、全ての外部シンボル・関数はリンクアドレスになるため、リロケータブルコード部５４内では、実行アドレスとリンクアドレスのオフセットを加算して分岐やシンボル参照が行なわれる。これを実現するためには、既に説明したＪＡＬ（）マクロ、ＬＡ（）マクロが利用される。
【０１０４】
ステップＳ２１における処理（＝キャッシュＲＡＭ領域への移行の処理）より後の処理は、非リロケータブルコードの処理となる。そのため、この領域へ突入する際には絶対アドレス分岐命令を利用して、ジャンプしなければならない。その処理を行うためのコードが、上述したジャンプコード６１である。
【０１０５】
図８の説明に戻り、ブートストラップ部５２の非リロケータブルコード部５５は、ジャンプアクセスコード６２とジャンプコード６３とから構成されている。ジャンプアクセスコード６２は、ブートストラップ部５２外のアドレスを、ＶＭＡ（Ｖａｌｉｄ  Ｍｅｍｏｒｙ  Ａｄｄｒｅｓｓ  ）により解決し、ジャンプし、アクセスするためのコードである。ジャンプコード６３は、アプリケーション部５３にジャンプするためのコードである。
【０１０６】
非リロケータブルコード部５５は、Ｃ言語やＣ＋＋言語、アセンブラなど通常の言語でプログラミングが可能な部分である。
【０１０７】
アプリケーション部５３の非リロケータブルコード部５６は、エントリポイント６４、コード・データ６６，６６、および、例外・割込みベクタ６７から構成されている。エントリポイント６４は、ジャンプコード６３によるジャンプ先であることを示す部分である。
【０１０８】
コード・データ６５は、ブートストラップ部５２から呼ばれるコードやデータであり、コード・データ６６は、ブートストラップ部から呼ばれないコードやデータである。例外・割込ベクタ６７は、所定の処理が行われているときに、何らかの異常が発生したときなど、例外的に行われる処理などについてのデータである。
【０１０９】
このような構成を有するプログラムにより、図７に示したようなフローチャートの処理が実行されるわけだが、その処理の特徴についてここで記載する。まず、キャッシュ・コヒーレンシ（Ｃａｃｈｅ  Ｃｏｈｅｒｅｎｃｅ）について説明する。図７のステップＳ２０の直後にキャッシュ・コヒーレンシを保つため、該当個所について命令キャッシュのクリアが必要である。図７に示したフローチャートだと、ステップＳ２０とステップＳ２１の間で行なわれることになるが、ステップＳ１６で初期化の処理が行われているので、ステップＳ２０とステップＳ２１の間で同じような処理が繰り返される必要はない。
【０１１０】
ステップＳ２３の例外・割込みベクタがコピーされるという処理の後でも同様にキャッシュコヒーレンシを保つ必要があるが、例外処理と割り込み処理は、ブートストラップが終了するまで実行されることが無い。そのためにステップＳ２６における、データキャッシュフラッシュと、ステップＳ２７における、命令キャッシュクリアは、ステップＳ２５の処理のあとで行っている。
【０１１１】
また、ステップＳ２６におけるデータキャッシュフラッシュは、これ以外にステップＳ２２、ステップＳ２４、およびステップＳ２５で行なわれるＲＡＭへの書き込みを確実に行うための処理（後述のマルチプロセッサ対応）も兼ねている。
【０１１２】
次にマルチプロセッサ対応について説明する。ステップＳ２６の処理として行われる、全データキャッシュフラッシュは、１つのＣＰＵに着目している場合、上述のキャッシュ・コヒーレンシにかかわる部位以外（ステップＳ２２，２４，２５）については別段と必要とされない。しかしながら、これらのデータ部が他のＣＰＵと共有される場合を考慮し、確実に書き込みが行なわれるようにするために、フラッシュする。
【０１１３】
次に、アプリケーションのロードイメージ作成方法について説明する。まず実行ファイルについて説明する。対象とされるユーザのアプリケーションプログラムとブートストラップは、図８に示したように、単一の実行ファイルとしてコンパイル、リンクされる必要がある。この実行ファイルはＥＬＦ／ＤＷＡＲＦ形式になっているのが一般的であるが、ＩＣＥ、ホストデバッガが扱える形式ならその他の形式を用いることも可能である。
【０１１４】
実行ファイルのリンクアドレスについて説明する。対象とされるユーザのアプリケーションプログラムが、実際に実行させたいアドレスでリンクされ（一般に、この実行させたいアドレスのことをＶＭＡ：仮想メモリアドレスと呼ぶ）、レイアウトされる（一般に、このレイアウトするアドレスのことをＬＭＡ：ロードメモリアドレスと呼ぶ）。但し、前記アプリケーションの実行装置、実行環境で上げた領域以外は無効である。
【０１１５】
次に、ロード用イメージへの変換について説明する。ロード用イメージのファイルとしては、例えば、Ｍｏｔｏｒｏｌ−Ｓ形式があるが、ＩＣＥやホストローダーが扱えるならその他の形式でも良い。Ｍｏｔｏｒｏｌ−Ｓ形式が利用される場合、実行ファイル（ＥＬＦ／ＤＷＡＲＦ形式）から変換される。
【０１１６】
対象とされるアプリケーションプログラムが、ＲＯＭ領域や非キャッシュＲＡＭ領域に配置される場合、エントリポイントが、その領域へマップされるようにオフセット値が加えられたＭｏｔｏｒｏｌ−Ｓ形式やＥＬＦ／ＤＷＡＲＦ形式などのロード用イメージファイルが作成される。
【０１１７】
対象とされるアプリケーションプログラムがキャッシュＲＡＭ領域に配置される場合、そこに対応する非キャッシュＲＡＭ領域へマップされるようにオフセット値が加えられたＭｏｔｏｒｏｌ−Ｓ形式やＥＬＦ／ＤＷＡＲＦ形式のファイルをロード用イメージとして作成される。これはロードの際キャッシュの状態と関係なく、確実にＲＡＭへロードするためである。
【０１１８】
実行環境が別の形式を必要とする場合、Ｍｏｔｏｒｏｌ−Ｓ形式やＥＬＦ／ＤＷＡＲＦ形式として一旦作成されたファイルがさらに変換されて利用される。例えば、ＶＣＳが利用される場合、必要に応じてｄａｔ形式へ変換されればよい。
【０１１９】
次に、ロード前に行う処理についてだが、キャッシュまたは非キャッシュのＲＡＭからブートする場合、ＤＲＡＭの初期化が必要なときは、ロードが行なわれる前に外部から初期化される。そして、ロードの方法だが、上述したロード用イメージ全体を対象とするブート領域に全てロードされる。これは、非キャッシュＲＯＭ領域からブートする場合も同様に行われる。
【０１２０】
キャッシュまたは非キャッシュのＲＡＭからブートする場合、上述した方法で生成されたロード用イメージファイル、例えば、Ｍｏｔｏｒｏｌａ−Ｓ形式等のファイルが利用可能である。ロードするアドレス（ＬＭＡ）及びロードされるアプリケーションプログラム及びブートストラップは、これに含まれている。
【０１２１】
ロードを行う主体は、ホストＣＰＵ、ＩＣＥ、ＪＴＡＧ−ＩＣＥ等が利用された自ホストデバッガ、または、シミュレーション環境のローダー（ＶＣＳのｒｅａｄｍｅｍｈ等）、これらのいずれの場合でも可能である。
【０１２２】
そして、ロード後に行なわれる処理だが、デバッガが利用されてシンボリックデバッグが行なわれる場合、実行ファイルからシンボルがロードされる。
【０１２３】
次に、アプリケーションの実行方式や装置について説明する。リセットから実行される場合（通常の処理の場合）、通常どおり、ＣＰＵのリセットが解除されＣＰＵの実行が開始される。
【０１２４】
自ホストデバッガ以外から実行制御する場合（オプション１の場合）、他ホストデバッガ、ホストＣＰＵ、ＶＣＳなど自ホストデバッガ以外から実行させたい場合、自ＣＰＵのリセットベクタ上に、ロードされているエントリポイントのアドレスへのジャンプコードが置かれ、ＣＰＵの実行が開始される。例えば、非キャッシュＲＡＭの場合、
ｌｉ  ｔ０，  ０ｘＡ０００００００
ｊｒ  ｔ０
ｎｏｐ
とされる。
【０１２５】
自ホストデバッガから実行が制御される場合（オプション２の場合）、ＩＣＥ、ＪＴＡＧ−ＩＣＥが利用されるとき、プログラム実行前にＰＣがロードされているエントリポイントのアドレスにセットされ、ＣＰＵの実行が開始される。
【０１２６】
処理のルーチン化、自動化（特別な処理、特にユーザ側の処理がなくても行われること）について、ロードイメージ作成は、Ｍａｋｅｆｉｌｅを利用することによって、ブートストラップのロードイメージ作成方法を自動化できる。また、ロード・実行は、自・他ホストデバッガが利用される場合、ＩＣＥのバッチ処理機能を利用することによってブートストラップのロード、実行が自動化できる。
【０１２７】
ブート条件をまとめると、図９に示したようになる。図９において、２重まるの印は、推奨を示し、まるの印は、ブートが可能なことを示し、三角の印はキャッシュのフラッシュが必要であることを示し、ばつの印は、ブートが不可能なことを示す。
【０１２８】
次に、図１０乃至図１５を参照して、図７に示したフローチャートにおける処理について、さらに説明する。図１０乃至図１５には、擬似的に、ＲＯＭ領域とＲＡＭ領域を示し、それらの間で行われるデータの授受などの処理を、図７に示したフローチャートの各処理と対応付けて図示してある。また、ＲＯＭ領域やＲＡＭ領域は、例えば、８ＭＢである。また、図中、［］書きのアドレスは、Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓを示し、その他のアドレスは、Ｐｈｓｉｃａｌ  Ａｄｄｒｅｓｓを示す。
【０１２９】
図１０は、図１乃至図５に示した構成のシステムにおいて、自律ブートで、ステップＳ１１（図７）の処理として、通常の処理から処理が開始される場合、すなわち、ブートストラップのエントリポイントから処理が開始される場合の処理の流れを示してる。図１０におけるＲＯＭ領域は、図１乃至図３においては、ＲＯＭ５−１乃至５−３であり、図４，５においては、外部ＲＯＭ２２である。また、図１０におけるＲＡＭ領域は、図１乃至図５においては、ＲＡＭ３−１乃至３−５である。
【０１３０】
ステップＳ１１の処理として、ＲＯＭ領域のエントリーポイント（Ｅｎｔｒｙ  Ｐｏｉｎｔ）から処理が実行される。そして、ステップＳ１２乃至Ｓ１９の処理が、ＲＯＭ領域のプログラムに従って、順次実行され、ステップＳ２１の処理として、ＲＯＭ領域のプログラムが、ＲＡＭ領域へとコピーされる。その後、そのようにしてＲＡＭ領域にコピーされたプログラムに従って、処理が行われる。
【０１３１】
図１１は、図３、図５、または、図６に示した構成のシステム、換言すれば、リセットベクタをプログラム領域と重複しないＲＡＭ領域として構成したシステムにおいて、他律ブートで、通常の処理により処理が開始される場合、すなわちブートストラップのエントリポイントから処理が開始される場合の処理の流れを示している。
【０１３２】
図１１における図中、上側に図示したＲＡＭ領域は、図３，５，６における外部ＲＡＭ１３に対応し、下側に図示したＲＡＭ領域は、図３，５，６におけるＲＡＭ３−３，３−５，３−６に対応する。図１１に示した状況は、ステップＳ１１の処理が行われる前の時点で、Ｈｏｓｔ  ＣＰＵ（ホストコンピュータ１１）またはＩＣＥ３２から、コード全体が外部ＲＡＭ２１にコピーされる。
【０１３３】
このようにして外部ＲＡＭ２１にコピーされたコードに従って、ステップＳ１１以下の処理が、図１０に示した状況と同様に実行される。図１０に示した状況と図１１に示した状況は、自律ブートであるか他律ブートであるかの違いであり、そのために、コード全体が、システムＬＳＩ１内のＲＯＭ５に記憶されている状態から処理が開始されるか、システムＬＳＩ１外の外部ＲＡＭ２１に記憶された状態から処理が開始されるかの違いが生じるだけで、その後の処理は、基本的に同様に行われる。
【０１３４】
図１２は、図３、図５、または、図６に示した構成のシステム、換言すれば、リセットベクタをプログラム領域と重複するＲＡＭ領域として構成したシステムにおいて、他律ブートで、通常の処理により処理が開始される場合、すなわち、ブートストラップのエントリポイントから処理が開始される場合の処理の流れを示している。
【０１３５】
この場合、図１１に示した状況と同様に、Ｈｏｓｔ  ＣＰＵまたはＩＣＥから、コード全体が供給され、そのコード全体が、システムＬＳＩ１内のＲＡＭ３の領域、非キャッシュＲＡＭ領域、および、外部ＲＡＭ２１の領域に、それぞれコピーされる。ステップＳ１１の処理としてエントリーポイントからの処理が開始されるが、そのエントリーポイントは、ＲＡＭ領域（この場合、外部ＲＡＭ２１の領域）に設定されている。ステップＳ１２の処理として、ブートストラップ本体、この場合、非キャッシュＲＡＭ領域にジャンプされる。
【０１３６】
そして、非キャッシュＲＡＭ上での処理が実行されていると、ステップＳ１７の処理として、非キャッシュＲＡＭ上で処理が実行されていると判断されるため、ステップＳ２１に処理が進められる。その結果、キャッシュＲＡＭ領域にジャンプ、すなわちこの場合、外部ＲＡＭ２１のＲＡＭ領域へとジャンプされる。その後の処理は、ジャンプ先のＲＡＭ領域のプログラムに従って行われる。
【０１３７】
図１３は、図１乃至図５に示した構成のシステムにおいて、他律ブートで、オプション１により処理が開始される場合、すなわち、非キャッシュＲＡＭ領域へジャンプした後、ブートストラップのエントリポイントから処理が開始される場合で、ＩＣＥ３２などがなく、ＰＣが変更することができない場合の処理の流れを示している。
【０１３８】
この場合、ＲＯＭ領域、非キャッシュＲＡＭ領域、ＲＡＭ領域の間において処理が実行されるわけだが、ＲＯＭ領域（システムＬＳＩ１内のＲＯＭ５またはシステムＬＳＩ１外の外部ＲＯＭ２２）には、ジャンプコードが記憶されており、そのジャンプコードにより、非キャッシュＲＡＭにジャンプされる。このようにすることで、システムＬＳＩ１内にＲＯＭが備えられている場合でも、備えられていないＲＯＭレスのタイプでも、適切にブートが行われることになる。また、外部モードであっても内部モードであっても、問題なくブート処理が行われる。
【０１３９】
非キャッシュＲＡＭにジャンプした後、さらにステップＳ１２の処理として、ブートストラップ本体にジャンプされるが、ブートストラップ本体は、非キャッシュＲＡＭ領域内なので、非キャッシュＲＡＭ内でのジャンプの処理が行われる。その後の処理は、図１２に示した状況と同様に行われる。
【０１４０】
図１４は、図３、図５、または、図６に示した構成、換言すれば、リセットベクタをプログラム領域と重複しないＲＡＭ領域として構成したシステムにおいて、他律ブートで、オプション１により処理が開始される場合、すなわち、非キャッシュＲＡＭ領域へジャンプした後、ブートストラップのエントリポイントから処理が開始される場合で、ＩＣＥ３２などがなく、ＰＣが変更することができない場合の処理の流れを示している。
【０１４１】
この場合、Ｈｏｓｔ  ＣＰＵまたはＩＣＥからは、ジャンプコードが、外部ＲＡＭ２１の領域にコピーされ、コード全体は、非キャッシュＲＡＭ領域とシステムＬＳＩ１のＲＡＭ３の領域にコピーされる。図１３に示した状況は、外部ＲＡＭ２１の領域にコピーされたジャンプコードに従って、非キャッシュＲＡＭ領域にジャンプした後は、図１３に示した状況のときと、同様の流れで処理が行われる。
【０１４２】
図１５は、図１乃至図５に示したシステム構成において、または、図３、図５、または、図６に示した構成で、リセットベクタをプログラム領域と重複しないＲＡＭ領域として構成したシステムにおいて、他律ブートで、オプション２により処理が開始される場合、すなわち、非キャッシュＲＡＭ領域へジャンプした後、ブートストラップのエントリポイントから実行が開始される場合の処理の流れを示している。
【０１４３】
この場合、Ｈｏｓｔ  ＣＰＵまたはＩＣＥからは、非キャッシュＲＡＭ領域とＲＡＭ領域に、コード全体がコピーされる。そしてこの場合、ステップＳ１１の処理としては、非キャッシュＲＡＭから処理が開始される。その後の処理は、基本的に、図１４に示した状況と同様に行われる。
【０１４４】
このようにブートが行われることにより、以下のような利点がある。アブソリュート形式のままアプリケーションプログラムとして利用可能となる。すなわち、使用されるシステムＬＳＩ専用の既存の開発ツールによって作成されたアブソリュート形式のメインプログラムを、そのままアプリケーションプログラムとして利用可能となる。
【０１４５】
ファームウエアの変更無しに他律ブート、自律ブートの両方が可能となる。すなわち、ＲＯＭから自律起動する「自律ブート」と、外部モード時に外部ホストまたはデバッガからの制御によってファームウエアをＲＡＭにコピーし起動する「他律ブート」の両方のブート方法を、プログラムを変更すること無しに、開発時・商品化時に利用することができる。
【０１４６】
ブートメモリ領域に対するデバイス選定の前にファームウエア開発が可能となる。すなわち、システムＬＳＩのプログラムメモリやブート用メモリ領域に対するデバイスの決定する前の段階からアプリケーションの開発ができ、システムＬＳＩとアプリケーションの協調設計がシームレスに行えるようになる。
【０１４７】
ブートメモリ領域がＲＯＭであっても、ＩＣＥなどが必要とせず、煩雑なＲＯＭの書き換え作業が不要となる。すなわち、ブートメモリ領域がＲＯＭである場合、ＲＯＭを書き換えるかＲＯＭ  ＩＣＥを利用するなどしないと通常、ファームウエアの変更が出来ない。特に、ＥＰＲＯＭ内蔵タイプの場合、ＲＯＭ  ＩＣＥが利用できないため、ＲＯＭを書き換える煩雑な作業が必要であるが、本発明を適用することにより、ファームウエアの変更無しに他律ブートを利用し、セット開発時のファームウエアやデバイスの初期化コード修正など、頻繁なファームウェアイメージの変更に柔軟に対応できるようになる。
【０１４８】
上述した一連の処理を行うプログラムを記録媒体に記録し、配布するといったことも可能である。そのようにした場合の記録媒体について説明する。一連の処理をソフトウェア（プログラム）により実行させる場合には、そのソフトウェアを構成するプログラムが専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０１４９】
図１６は、汎用のパーソナルコンピュータの内部構成例を示す図である。パーソナルコンピュータのＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２に記憶されているプログラムに従って各種の処理を実行する。ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３には、ＣＰＵ１０１が各種の処理を実行する上において必要なデータやプログラムなどが適宜記憶される。入出力インタフェース１０５は、キーボードやマウスから構成される入力部１０６が接続され、入力部１０６に入力された信号をＣＰＵ１０１に出力する。また、入出力インタフェース１０５には、ディスプレイやスピーカなどから構成される出力部１０７も接続されている。
【０１５０】
さらに、入出力インタフェース１０５には、ハードディスクなどから構成される記憶部１０８、および、インターネットなどのネットワークを介して他の装置とデータの授受を行う通信部１０９も接続されている。ドライブ１１０は、磁気ディスク１２１、光ディスク１２２、光磁気ディスク１２３、半導体メモリ１２４などの記録媒体からデータを読み出したり、データを書き込んだりするときに用いられる。
【０１５１】
記録媒体は、図１６に示すように、パーソナルコンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク１２１（フレキシブルディスクを含む）、光ディスク１２２（ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ−Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ），ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）を含む）、光磁気ディスク１２３（ＭＤ（Ｍｉｎｉ−Ｄｉｓｃ）（登録商標）を含む）、若しくは半導体メモリ１２４などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記憶されているＲＯＭ１０２や記憶部１０８が含まれるハードディスクなどで構成される。
【０１５２】
なお、本明細書において、媒体により提供されるプログラムを記述するステップは、記載された順序に従って、時系列的に行われる処理は勿論、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０１５３】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【０１５４】
【発明の効果】
本発明によれば、使用されるシステムＬＳＩ専用の既存の開発ツールによって作成されたアブソリュート形式のメインプログラムを、そのままアプリケーションプログラムとして利用可能となる。
【０１５５】
また、本発明によれば、ＲＯＭから自律起動する「自律ブート」と、外部モード時に外部ホストまたはデバッガからの制御によってファームウエアをＲＡＭにコピーし起動する「他律ブート」の両方のブート方法を、プログラムを変更すること無しに、開発時・商品化時に利用することができる。
【０１５６】
また、本発明によれば、システムＬＳＩのプログラムメモリやブート用メモリ領域に対するデバイスの決定する前の段階からアプリケーションの開発ができ、システムＬＳＩとアプリケーションの協調設計がシームレスに行えるようになる。
【０１５７】
さらに本発明によれば、ブートメモリ領域がＲＯＭである場合、ＲＯＭを書き換えるかＲＯＭ  ＩＣＥを利用するなどしないと通常、ファームウエアの変更が出来ない。特に、ＥＰＲＯＭ内蔵タイプの場合、ＲＯＭ  ＩＣＥが利用できないため、ＲＯＭを書き換える煩雑な作業が必要であるが、本発明を適用することにより、ファームウエアの変更無しに他律ブートを利用し、セット開発時のファームウエアやデバイスの初期化コード修正など、頻繁なファームウェアイメージの変更に柔軟に対応できるようになる。
【図面の簡単な説明】
【図１】システムＬＳＩを含む構成を示す図である。
【図２】システムＬＳＩを含む構成を示す図である。
【図３】システムＬＳＩを含む構成を示す図である。
【図４】システムＬＳＩを含む構成を示す図である。
【図５】システムＬＳＩを含む構成を示す図である。
【図６】システムＬＳＩを含む構成を示す図である。
【図７】ブート処理について説明するためのフローチャートである。
【図８】実行ファイルについて説明するための図である。
【図９】ブート可能条件について説明するための図である。
【図１０】処理の流れを説明するための図である。
【図１１】処理の流れを説明するための図である。
【図１２】処理の流れを説明するための図である。
【図１３】処理の流れを説明するための図である。
【図１４】処理の流れを説明するための図である。
【図１５】処理の流れを説明するための図である。
【図１６】媒体を説明する図である。
【符号の説明】
１  システムＬＳＩ，  ２  ＣＰＵ，  ３  ＲＡＭ，  ４  Ｉ／Ｏ，  ５  ＲＯＭ，  １１  ホストコンピュータ，  １２  外部バス，  １３  外部ＲＡＭ，２１  外部ＲＡＭ，  ２２  外部ＲＯＭ，  ２３  モード切替スイッチ，  ２４  モード切替制御装置，  ３１  メモリマッピング変換回路，  ３２  ＩＣＥ
【図１】
2004348677.tif 000003
【図２】
2004348677.tif 000004
【図３】
2004348677.tif 000005
【図４】
2004348677.tif 000006
【図５】
2004348677.tif 000007
【図６】
2004348677.tif 000008
【図７】
2004348677.tif 000009
【図８】
2004348677.tif 000010
【図９】
2004348677.tif 000011
【図１０】
2004348677.tif 000012
【図１１】
2004348677.tif 000013
【図１２】
2004348677.tif 000014
【図１３】
2004348677.tif 000015
【図１４】
2004348677.tif 000016
【図１５】
2004348677.tif 000017
【図１６】
2004348677.tif 000018