(57)【要約】【課題】各々ＣＰＵを有するメインシステム及びサブシステムを含むコンピュータシステムにおいて、メインシステムを起動するための様々手段を容易に提供する。【解決手段】サブＣＰＵ２１は、メインＣＰＵ２の周辺デバイス（１２Ｂ〜１２Ｄ）を起動し（１０４）、メインシステム１内のメモリ１１Ｂにアクセスする経路を確立し（１０５）、メインＣＰＵ（１０）のブートコードを、前記コンピュータシステムに装着された可搬型メモリ２４から読出し、前記確立された経路を介してメインシステム１のメモリに移動し（１０６）、メインＣＰＵ（１０）によるブートコードの実行を許可する。【選択図】図１
2007206885.tif 000002
【特許請求の範囲】
【請求項１】
メインＣＰＵを有するメインシステム１と、該メインシステムの起動を制御しサブＣＰＵを有するサブシステム２とを含むコンピュータシステムにおける、前記メインシステムを起動する方法であって、
前記サブＣＰＵは、
前記メインＣＰＵの周辺デバイスを起動し、
前記メインシステム内のメモリにアクセスする経路を確立し、
前記メインＣＰＵのブートコードを、前記コンピュータシステムに装着された可搬型メモリから読出し、前記確立された経路を介して前記メインシステムのメモリに移動し、
前記メインＣＰＵによるブートコードの実行を許可することを特徴とするシステム起動方法。
【請求項２】
前記サブＣＰＵは、前記ブートコードと共に前記メインＣＰＵにより実行されるユーザプログラムを前記メインシステムのメモリに転送し、
前記ブートプログラムには、前記メインＣＰＵがメインシステムのメモリ上の前記ユーザプログラムにジャンプするための命令が含まれることを特徴とする請求項１記載の方法。
【請求項３】
前記可搬型メモリは、メモリカードであることを特徴とする請求項１記載の方法。
【請求項４】
前記コンピュータシステムは、前記メインＣＰＵ及びサブＣＰＵが通信を行う際に共通に使用されるデータ格納部を具備し、前記ブートコードの実行許可を示す通知は、前記サブＣＰＵにより前記データ格納部に書き込まれ、前記メインＣＰＵがそれを読み出すことにより、前記メインＣＰＵは前記ブートコードの実行許可を判断することを特徴とする請求項１記載の方法。
【請求項５】
メインＣＰＵを有するメインシステムと、該メインシステムの起動を制御しサブＣＰＵを有するサブシステムとを含むコンピュータシステムにおける、前記メインシステムを起動する方法であって、
前記サブＣＰＵは、
（ａ１）可搬型メモリに格納され前記メインＣＰＵを起動するためのブートコードを、該可搬型メモリから前記サブシステム内のメモリに転送し、
（ａ２）前記メインＣＰＵの周辺デバイスを起動し、
（ａ３）前記メインＣＰＵによるブートコードのフェッチを許可し、
前記メインＣＰＵは、
（ｂ１）前記サブシステム内のメモリにアクセスする経路を確立し、
（ｂ２）前記ブートコードを前記サブシステム内のメモリから、前記確立された経路を介して前記メインシステム内のメモリに転送し、
（ｂ３）前記メインシステム内のメモリに転送されたブートコードを実行することを特徴とする方法。
【請求項６】
前記サブＣＰＵは、前記ブートコードと共に前記メインＣＰＵにより実行されるユーザプログラムを前記サブシステム内のメモリに転送し、
前記ブートプログラムには、前記メインＣＰＵが前記サブシステム内のメモリに転送された前記ユーザプログラムにジャンプするための命令が含まれることを特徴とする請求項５記載の方法。
【請求項７】
前記可搬型メモリは、メモリカードであることを特徴とする請求項５記載の方法。
【請求項８】
メインＣＰＵと、メモリと、前記メインＣＰＵにより制御される周辺デバイスを有するメインシステムと、該メインシステムの起動を制御しサブＣＰＵを有するサブシステムとを含むコンピュータシステムであって、
前記サブシステムは、
前記メインＣＰＵの前記周辺デバイスを起動する手段と、
前記メインシステム内の前記メモリにアクセスする経路を確立する手段と、
可搬型メモリを装着するための装着手段と
前記装着手段に接続された前記可搬型メモリから前記メインＣＰＵのブートコードを読出し、前記確立された経路を介して前記メインシステムのメモリに移動する手段と、
前記メインＣＰＵによるブートコードの実行を許可する手段と、
を具備することを特徴とするコンピュータシステム。
【請求項９】
前記メインＣＰＵ及びサブＣＰＵとの通信を可能とする通信手段、及び該通信手段により前記メインＣＰＵ及びサブＣＰＵが通信を行う際に共通に使用されるデータ格納部とを具備し、
前記実行許可手段は、前記ブートコードの実行許可を示す通知を前記データ格納部に書き込み、前記メインＣＰＵがそれを読み出すことにより、前記メインＣＰＵは前記ブートコードの実行許可を判断することを特徴とする請求項７記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメインシステム起動用のサブシステムを持つコンピュータシステムに関する。
【背景技術】
【０００２】
近年のコンピュータシステムでは、例えば起動（ブート）の際にＣＰＵがなすべき一連の処理を記述したブートプログラムをＲＯＭに予め書き込んでおき、実際の起動時にこれを実行することにより、例えばディスク装置からオペレーティングシステムを自己のＲＡＭに読み込み、目的のプログラム（ユーザプログラム）が実行されるシステムもある。従来、コンピュータシステムを開発する場合、このようなブートプログラムを例えばプログラマブルＲＯＭに書き込み、各種動作試験が行われる。
【０００３】
また近年では、システムの高速化及び多機能化を目的として、複数のＣＰＵを具備するいわゆるマルチプロセッサー方式も一般的になっている。このようなマルチプロセッサー方式のコンピュータシステムの例が、下記特許文献１に開示されている。この文献では、所定のＣＰＵがＲＯＭに格納されたデータを使用して起動する。更に所定のＣＰＵは他のＣＰＵを起動するためのデータをＲＯＭもしくはその他の記憶装置から読み出して共通メモリ上に書き込こんだ上で、前記他のＣＰＵに起動信号を送る。所定のＣＰＵ以外のＣＰＵはこの起動信号を受けて、共通メモリ上に書き込まれたデータを使用して起動を行う。
【特許文献１】特開平４−１７７４５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
コンピュータシステムの開発では、ブートコードあるいは目的のプログラムを容易に変更できることが望まれる。上記特許文献１では、ブートコードのみが所定のＣＰＵにより共有メモリに記録され、該ブートコードが他のＣＰＵにより実行される。一般にコンピュータシステムは、ＣＰＵ及びＲＯＭの他に、ＲＡＭ、電源部及びクロック発生部のような複数の周辺デバイスを含んでいる。システムの設計変更あるいは様々なタイプのコンピュータシステムに対応するためには、上記周辺デバイスの各種設定（パラメータ）を容易に変更できることが望まれる。
【０００５】
また、コンピュータシステムを開発する場合、上記したようなブートコード及び／または目的のユーザプログラムを変更する場合、例えばプログラマブルＲＯＭの内容を変更する必要がある。この変更は、ＲＯＭライターのような専用装置を使用してＲＯＭの内容を変更し、ＩＣソケットに装着されたＲＯＭを専用の器具を用いて交換する必要がある。
【０００６】
本発明は、各々ＣＰＵを有するメインシステム及びサブシステムを含むコンピュータシステムにおいて、メインシステムを起動するための様々手段を容易に提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一実施例に係るシステム起動方法は、メインＣＰＵを有するメインシステムと、該メインシステムの起動を制御しサブＣＰＵを有するサブシステム２とを含むコンピュータシステムにおける、前記メインシステムを起動する方法であって、前記サブＣＰＵは、前記メインＣＰＵの周辺デバイスを起動し、前記メインシステム内のメモリにアクセスする経路を確立し、前記メインＣＰＵのブートコードを、前記コンピュータシステムに装着された可搬型メモリから読出し、前記確立された経路を介して前記メインシステムのメモリに移動し、前記メインＣＰＵによるブートコードの実行を許可する。
【発明の効果】
【０００８】
メインシステム及びサブシステムを含むコンピュータシステムにおいて、メインシステムを起動するための様々手段が容易に提供される。
【発明を実施するための最良の形態】
【０００９】
以下、図面を参照して本発明の実施形態を説明する。
【００１０】
図１は本発明の一実施形態に係るコンピュータシステム１００の全体構成を示すブロック図である。コンピュータシステム１００は、メインＣＰＵ１０を持つコンピュータシステム（メインシステム）１と、該メインシステム１の起動（ブート）に必要な処理（後述のパワーオンリセットなど）を行うサブコンピュータシステム（サブシステム）２を含む。メインシステム１とサブシステム２は物理的には一体のハードウェアシステムである。メインシステム１とサブシステム２は、シリアルバス（Ｉ２ＣやＳＰＩなど）３０及びパラレルバス（ＰＣＩバスなど）３１により接続されている。コンピュータシステム１００は、家電製品あるいはＡＶ機器など様々の電子機器の開発に用いることができる。
【００１１】
サブシステム２はメインシステム１の電源制御、リセット制御、クロック制御などを行う周辺デバイスをシリアルバス３０を介して制御し、メインシステム上のメモリとサブシステム上のメモリ間のデータ転送をパラレルバス３１を介して制御する。
【００１２】
メインシステム１は、メインＣＰＵ１１に直結したメインシステムメモリ１１Ａと、ＩＯ系制御用の周辺デバイス１２Ａに直結したメインシステムメモリ１１Ｂを持つ。メインＣＰＵ１０と周辺デバイス１２ＡはＩＯバス１４により接続されている。メインシステムの周辺デバイス１２Ａは、メインシステムＲＯＭ１３と接続され、メインＣＰＵ１０からのアクセスが可能である。メインＣＰＵ１０のメモリアクセス速度の関係は「メインシステムメモリ１１Ａ＞メインシステムメモリ１１Ｂ＞メインシステムＲＯＭ１３」となっている。周辺デバイス１２Ｂ、１２Ｃ、１２Ｄはそれぞれメインシステム１の電源制御、クロック制御、リセット制御を行う機能を持つ。各周辺デバイス１２Ａ〜１２Ｄ及びメインＣＰＵ１０は、サブシステム２のサブＣＰＵ２１により制御されるシリアルバスインタフェースをそれぞれ持つ。周辺デバイス１２Ａは、メインＣＰＵ１０とサブＣＰＵ２１間の通信に利用されるＭａｉｌ Ｂｏｘ１５を持つ。
【００１３】
サブシステム２は、サブＣＰＵ２１に直結したサブシステムメモリ２２、サブシステムＲＯＭ２５、更にサブシステム本体から着脱可能なサブシステムＲＡＭ（メモリカード）２４を持つ。サブシステムＲＡＭはカードスロット２４ａによりサブシステム２に装着すなわち接続される。またサブシステムＲＡＭ２４はＰＣ（personal computer)などでも利用可能なファイルシステムを持ち、本システム１００で使用するためのユーザプログラム、ブートコードなどのプログラムを、ＰＣを利用して保存することができる。サブシステム２は、シリアルバス３１のインターフェースコントローラ及びパラレルバス３２のインターフェースコントローラ（共に図示されず）を、例えばサブＣＰＵ２１内に有している。
【００１４】
上記システムの構成を利用して以下に述べる機能や動作を実現することが可能となる。
【００１５】
（１）システム全体の起動（ブート）方法及びブートコード配置
このシステム１００全体では、システム各部を起動する手順のなかで、メインＣＰＵ１０を起動するためのプログラム（ブートコードと呼ぶ）を配置する方法として以下の方法を採用することが可能である。尚、サブシステム２のサブＣＰＵ２１の起動は、サブシステムＲＯＭ２３に書き込まれたブートコードをサブＣＰＵ２１がフェッチすることで実現する。以下に示すサブＣＰＵ２１の起動方法において、サブＣＰＵにより実行される処理は、例えばプログラムとしてサブシステムＲＯＭ２３に格納されている。
【００１６】
（１−１）サブシステムＲＡＭに保存したブートコードによる起動（サブシステム主導）
先ず、メインＣＰＵがサブシステム主導で、サブシステム上のサブシステムＲＡＭ２４に保存されたブートコードにより起動する方法について述べる。図２はこのメインＣＰＵ起動方法を示すフローチャート（メインＣＰＵの起動１）である。
【００１７】
サブシステムＲＡＭ２４には予めメインＣＰＵのブートコード情報テーブルが保存される（ブロック１０１）。ブートコード情報テーブルにはブートコード本体の他に、ブートコードの例えばサイズ等の属性情報と、ブートコードをメインシステム上のどこに配置するかというアドレス情報も記録されている。
【００１８】
図３はブートコード情報テーブル４０の一例を示す。図３の例では、ブートコード情報テーブル４０は４つの起動用プログラム４１Ａ〜４１Ｄ、及び各プログラムに関する関連情報４２Ａ〜４２Ｄを含む。これらプログラム４１Ａ〜４１Ｄは全てブートコードであっても良いし、１つのブートプログラムとＯＳあるいはアプリケーションプログラム等のプログラムであっても良い。ここでは全てブートコードであるとする。例えば関連情報４２Ａは、ファイル名が「ＰＲＯＧＡ．ＢＩＮ］のブートコードの転送元ファイルアドレスが「０ｘ０００１００００］、転送先ファイルアドレスが「０ｘ４０００００００」であることを示す。転送元アドレスはサブシステムＲＡＭ２４のアドレスであって、オフセット値で示され、転送先アドレスはメインシステムメモリ１１Ｂのアドレスを示す。
【００１９】
サブシステム２は、例えばその電源が投入されると起動し（ブロック１０２）、サブシステムＲＡＭ２４に記録されたブートコード情報テーブル４０を読み、そのテーブル４０に従い、サブシステムＲＡＭに格納されたブートコードをメインシステムメモリに移動する（ブロック１０３）。ここでは図３のように、サブシステムＲＡＭ２４に保存されたブートコード４１Ａ〜４１Ｄがメインシステムメモリ１１Ｂに配置されるようにアドレス情報が保存されているものとする。
【００２０】
サブＣＰＵ２１はメインシステム１のメインシステムメモリ１１Ｂにブートコードを配置するために、メインシステム１のメインＣＰＵ１０以外のハードウェア（電源投入（周辺デバイス１２Ｂ）、クロック起動（周辺デバイス１２Ｃ）、リセット解除（周辺デバイス１２Ｃ）等）を起動する（ブロック１０４）。尚、この動作は後述の項目（３）にて詳細に説明される。
【００２１】
これらハードウェアの起動後、サブＣＰＵ２１はメインシステムメモリ１１Ｂに接続された周辺デバイス１２Ａを初期設定する。すなわちサブＣＰＵ２１は、サブＣＰＵ２１と周辺デバイス１２Ａ間のパラレルバス（ＰＣＩバス）の開通させ、メインシステムメモリ１１Ｂまでのアクセス経路を確立する（ブロック１０５）。サブＣＰＵ２１はパラレルバス３１と周辺デバイス１２Ａを介したメインシステムメモリ１１Ｂまでのアクセス経路が確立したところで、サブシステムＲＡＭ２４に保存されたブートコードをメインシステムメモリ１１Ｂに転送する（ブロック１０６）。このときサブＣＰＵ２１はサブシステムメモリ２２をブートコードの一時バッファとして利用することも可能である。
【００２２】
メインシステムメモリ１１Ｂに対するブートコードの転送が完了したところで、サブＣＰＵ２１はメインＣＰＵ１０によるブートコードフェッチを許可する（許可する方法については、項目（４）で後述する）。これにより、メインＣＰＵ１０は起動し、メインシステムメモリ１１Ｂに配置されたブートコードのフェッチを開始する（ブロック１０７）。
【００２３】
本実施例（１−１）によれば、メインシステムＲＯＭ１３にメインＣＰＵ用のプログラムを全く保存する必要がなく、かつサブシステムＲＡＭ２４を利用し、例えばＰＣを用いてプログラムを容易に更新可能なため、ブートコードの開発フェーズ（開発の初期段階）に有効である。同様にサブＣＰＵ主導で、周辺デバイス１２Ａのパラレルバス初期化、メインシステムメモリ１１Ｂの初期化を実施するため、これら初期化プログラムの開発フェーズに有効である。またシステムブート後にアプリケーションプログラムなどのユーザプログラムを、サブシステムＲＡＭ２４からメインシステム１に転送して実行するという開発フェーズに有効である。
【００２４】
（１−２）  サブシステムＲＡＭに保存したブートコードによる起動（メインシステム主導）
次に、メインシステム１が主導でメインＣＰＵ１０を起動する場合について述べる。図４はメインシステム主導でメインＣＰＵを起動する方法を示すフローチャート（メインＣＰＵの起動２）である。
【００２５】
サブシステムＲＡＭ２４には１−１同様のブートコード情報テーブル４０が予め保存される（ブロック２０１）。サブシステムが起動されると（ブロック２０２）、サブＣＰＵ２１はサブシステムＲＡＭ２４に記録されたブートコード情報テーブル４０をサブシステムメモリ２２に転送する（ブロック２０３）。続いてサブＣＰＵ２１はメインシステム１のハードウェアを前述したように起動し（ブロック２０４）、メインＣＰＵ１０によるブートコードフェッチを許可する（ブロック２０５）。
【００２６】
メインＣＰＵ１０はフェッチ許可に応答して、先ずメインシステムＲＯＭ１３に保存されたデバイス初期化プログラム及びロードプログラムをフェッチする（ブロック２０６）。そしてメインＣＰＵ１０は、デバイス初期化プログラムに従って、周辺デバイス１２Ａの初期設定を行い、周辺デバイス１２ＡとサブＣＰＵ間のパラレルバス（ＰＣＩバス）を開通させ、周辺デバイス１２Ａとメインシステムメモリ１１Ｂ間の経路を確立する。これでパラレルバス３１を経由してメインＣＰＵ１０がサブシステムメモリ２２にアクセスする経路が確立される（ブロック２０７）。
【００２７】
ロードプログラムによりメインＣＰＵ１０は、サブシステムメモリ２２に配置されたブートコード情報テーブル４０を参照して、そのブートコードを対応するアドレスの領域に転送し、メインシステムメモリ１１Ｂにブートコードを再配置する（ブロック２０８）。配置完了後、ロードプログラムはメインシステムメモリ１１Ｂに配置されたブートコードへのジャンプをメインＣＰＵ１０に命令し、メインＣＰＵ１０は再起動する（ブロック２０９）。
【００２８】
[効果]
本実施例（１−２）によれば、後述の（１−３）の手法に最終的に移行する前段階として有効である。すなわち、メインＣＰＵ１０がメインシステムＲＯＭ１３に格納されているデバイス初期化プログラムやブートコードのロードプログラムを実行し、最終的にブートコードが起動されることを確認するのに有効である。またシステムブート後にアプリケーションプログラムなどのユーザプログラムを、サブシステムＲＡＭ２４からメインシステムＲＡＭに移動及び再配置して実行するという開発フェーズに有効である。
【００２９】
メインＣＰＵ１０がメインシステムＲＯＭ１３のロードプログラム及びデバイス初期化プログラムをフェッチし実行する方法は２通りある。
【００３０】
（１−２−１）１つ目は、デバイス初期化プログラム及びロードプログラムを全てメインシステムＲＯＭ１３から読み込む方法である。一般的にＲＯＭアクセスは低速なので、この方法はプログラム実行速度が比較的遅い。
【００３１】
（１−２−２）２つ目は、ロードプログラム及びデバイス初期化プログラムのうち、主にロードプログラムをメインシステムＲＯＭ１３からメインシステムメモリ１１Ｂに再配置して実行する方法である。メインＣＰＵ１０は、フェッチ許可された後、メインシステムＲＯＭ１３に格納されたデバイス初期化プログラムを実行し、周辺デバイス１２Ａとメインシステムメモリ１１Ｂ間の経路を確立する。
【００３２】
その後、メインＣＰＵ１０はロードプログラムをメインシステムＲＯＭ１３からメインシステムメモリ１１Ｂに再配置し、メインシステムメモリ１１Ｂ上のロードプログラムに命令ジャンプして、ロードプログラムを実行する。この方法は、メインシステムＲＯＭ１３へアクセスして実行する場合に比べ、高速にロードプログラムを実行することが可能になる。
【００３３】
（１−３）メインシステムＲＯＭ１３に保存したブートコードによる起動
図５はメインシステムＲＯＭ１３に保存したブートコードにより、メインＣＰＵを起動する方法を示すフローチャート（メインＣＰＵの起動３）である。
【００３４】
この場合は１−１、１−２のようにサブシステムとメインシステム間でブートコードの移動は行わない。メインＣＰＵ１０のブートコードは予めメインシステムＲＯＭ１３に保存される（ブロック３０１）。
【００３５】
システム起動手順は次のようになる。サブシステム２が起動後、サブＣＰＵ２１はメインシステム１のハードウェアを前述したように起動し、次にサブＣＰＵ２１はメインＣＰＵ１０のフェッチ許可を実施する（ブロック３０２）。メインＣＰＵ１０はメインシステムＲＯＭ１３より命令をフェッチして起動（ブート）する（ブロック３０３）。
【００３６】
この場合、先に述べたようにサブシステム２とメインシステム１間でブートコードの移動がないために、１−２のようなロードプログラム及びデバイス初期化プログラムを、ブートコード起動前に実行する必要がない。ただしブートコード実行速度を高速化するために、１−２−２に示した方法を合せて使用した上で、ブートコードをメインシステムメモリ１１Ｂに再配置して起動させてもよい。その場合には、デバイス初期化プログラムもメインシステムＲＯＭ１３に保存し、メインＣＰＵが実行してもよい。
【００３７】
[効果]
本実施例（１−３）で示した方法は、メインＣＰＵ１０が起動するためのブートコードあるいはアプリケーションプログラムの安定動作が確認された後すなわち開発完了後の起動方法として有効である。
【００３８】
（２）システム起動後のユーザプログラムのメインシステムメモリ１１Ａへの配置
１−１の方法、１−２の方法、又は１−３と１−２−２の方法を組み合わせた方法にて、ブートコードをメインシステムメモリ１１Ｂに配置し（１−１、１−２ならば、サブシステムＲＡＭ２４からメモリ１１Ｂに、１−３ならばメインシステムＲＯＭ１３からメモリ１１Ｂに配置し）、起動した場合、更にブートコードにより、メインシステムメモリ１１Ｂに配置されたアプリケーションプログラムなどのユーザプログラムを、メインシステムメモリＡに転送して再配置することが可能である。この場合ブートコードには、メインＣＰＵ１０がメインシステムメモリ１１Ａ上のプログラムにジャンプするための命令が含まれる。このようにして、サブシステムＲＡＭ２４にユーザプログラムを格納しておき、該ユーザプログラムをメインシステム１にて実行可能である。
【００３９】
[効果]
本実施例（２）によれば、システム起動後のユーザプログラムのメインシステムメモリ１１Ａへの配置を実行することで、メモリアクセスの速度が速くなるため、ユーザプログラムは高速に実行される。
【００４０】
（３）メインシステム１のハードウェア起動（パワーオンリセット制御の実行）
メインＣＰＵを持つメインシステム１は、パワーオンリセット制御として、
ａ．電源の投入（メインＣＰＵ、周辺デバイスなど）
ｂ．リセット信号の解除（各周辺デバイスには電源投入時、リセット信号が供給されている）
ｃ．クロックデバイスの初期化によるクロックの発振
ｄ．メインＣＰＵ１０と周辺デバイス間（ＣＰＵ１０と周辺デバイス１２Ａとメインシステムメモリ１１Ａなど）の高速通信インタフェースの初期化
ｅ．物理層・データリンク層・ロジカル層など各層の初期化（ハードウエア的に層（layer）がある）
ｅ．データリンク層キャリブレーションによる高速データ通信の確立
ｆ．メインＣＰＵ１０の初期化（初期化データの書込み）
等の処理が必要である。これらはサブシステムにより制御され、その結果メインＣＰＵ１０は起動のためのブートコードの読み込みを周辺デバイスより行い起動可能となる。またこれらのパワーオンリセット制御は、システムの初期電源投入時のみならず、動作中のシステムを停止制御及びリセット制御をするときも実行可能である。
【００４１】
（３−１）サブシステムによるパワーオンリセット制御プログラム
サブシステム２が上記メインシステム１のハードウェアを起動をするために実行するパワーオンリセット制御プログラム（以下ＰＯＲ制御プログラム）について述べる。これらのパワーオンリセット制御は、前述のブロック１０４、２０４等の処理に対応する。
【００４２】
メインシステム１のハードウェア起動には、上記したように大量のステップ数におよぶデバイス制御をしなくてはならない。デバイス制御は物理的にはＩ２ＣやＳＰＩなどのシリアルバスアクセスにて行われる。
【００４３】
メインシステム１の開発段階においては、ハードウエアの仕様変更による制御パラメータの変更が発生したり、システム全体の動作仕様の変更（例えばメインＣＰＵ１０の動作周波数、メインシステムメモリ１１Ａのメモリサイズ、また電源制御における電圧値などの変更）が発生することもある。このような設定パラメータの変更に柔軟に対応することを可能とするために、本ＰＯＲ制御プログラムでは、各デバイスへの設定情報は、プログラム本体とは別に用意したファイルに記述したスクリプトプログラムによって取得される。
【００４４】
ＰＯＲ制御プログラムは、サブＣＰＵ起動後、サブシステムＲＯＭ２３またはサブシステムＲＡＭ２４からサブシステムメモリ２２に転送及び配置され、サブＣＰＵ２１が実行する。サブＣＰＵ２１は、ＰＯＲ制御プログラムに従って、ファイルから読み出したスクリプトプログラムに基づき、シリアルバスインタフェースを使ったアクセスにより、メインシステム上のメインＣＰＵ１０、周辺デバイス１２Ａ〜１２Ｄのパラメータ設定（レジスタライト）、状態の取得（レジスタリード）を実行する。
【００４５】
更にＰＯＲ制御中に、メインシステムのメインＣＰＵ１０が固有の情報（ＣＰＵ単体毎に異なる情報）を持つ場合において、その固有の情報をＰＯＲ制御パラメータとして利用することも可能である。たとえばメインＣＰＵの適切な電圧設定値にばらつきなどがあるような時に、その設定値情報が個別にメインＣＰＵに記録されているならば、その情報をサブシステムにより読み込み、ＰＯＲ制御プログラムにおいて、設定値情報に基づいてメインＣＰＵの電圧設定値を、周辺デバイス１２Ｄを用いて適切な電圧に設定することも可能となる。
【００４６】
メインシステム１のメインＣＰＵ１０及び各周辺デバイスは、ファイルに記述された一連のスクリプトプログラムにより制御されることで、上述したパワーオンリセット制御が実現する。
【００４７】
スクリプトプログラムを含むファイルは、サブシステムＲＡＭ２４に保存され、サブシステムＲＯＭ２３のＰＯＲ制御プログラムに従って読み出される。更に最終的にはシステム全体の開発が完了し、メインシステム１の各デバイスへのパラメータ設定値などが確定した場合には、サブシステムＲＡＭ２４のファイルからスクリプトプログラムを読み込むのではなく、ＰＯＲ制御プログラムにパラメータ確定値などを取り込むことにより、ＰＯＲ制御シーケンスが実現される。
【００４８】
（４）メインＣＰＵとサブＣＰＵ間の通信方法
上記パワーオンリセット制御時、またはメインシステム起動後に、メインＣＰＵ１０がサブシステムへ、システムの状態やイベント通知をするために、周辺デバイス１２Ａが利用される。この周辺デバイス１２Ａを用いた情報通信に使用されるデータ格納部をＭａｉｌＢｏｘと呼ぶ。ＭａｉｌＢｏｘ１５は、実際には周辺デバイス１２Ａに内蔵されている数Ｋバイト程度の書込み／読み込み可能なレジスタまたはメモリである。サブシステム２はＭａｉｌＢｏｘ１５に記録された情報から、メインシステム１の状態を認識可能である。他方でサブシステム側の状態やイベント通知も、同様にＭａｉｌＢｏｘを利用してメインＣＰＵ１０に通知可能である。
【００４９】
（４−１）メインＣＰＵ起動許可イベント
（３）に示したパワーオンリセット制御を実行中に、メインＣＰＵ１０は起動可能な状態になり、メインシステムＲＯＭ１３またはメインシステムメモリ１１Ｂに命令フェッチを開始できる。しかしながら、サブシステムによるパワーオンリセット制御シーケンスの完了までは、メインＣＰＵ側のブートコードまたはプログラムの実行を抑制しておきたい場合がある（例えば、メインＣＰＵ１０とメインシステムメモリ１１Ａ間のメモリインタフェースの初期化が完了していない時）。このような場合、ＭａｉｌＢｏｘ１５を用いて通信が行われる。サブＣＰＵ２１はフェッチを許可する場合、メインＣＰＵ１０のフェッチ許可を意味するコードをＭａｉｌＢｏｘ１５に書き込む。メインＣＰＵ１０はＭａｉｌＢｏｘへそのコードが書き込まれるまで、ループ待ちをして次の処理には進まない。
【００５０】
（５）システムの制御
（１）、（２）、（３）、（４）に示した機能を利用することで、図１に示すシステム１００において以下のような制御を実現することが可能となる。
【００５１】
（５−１）システムの起動
サブシステム２への電源投入により、サブＣＰＵ２１が起動し、サブシステムはＰＯＲ制御プログラムを実行可能な状態となる。メインシステム起動イベントの発生（例えばリモコンによる電源ＯＮなど、ソフトウエア及びハードウエアのどちらからでもよい）により、ＰＯＲ制御プログラムが起動され、（３）に示したようにメインシステム１が起動される。メインＣＰＵ１０の起動方法は（１）、（４）に示した方法により実現可能である。メインシステム１は最終的に（２）で示したような手順を実行し、システム全体が起動し、目的のプログラムが動作する。
【００５２】
（５−２）システム停止／電源断イベント
（５−１）にて起動して動作している状態から、メインシステム停止または電源断イベント（ソフトウエア及びハードウエアのどちらでもよい）が発生すると、サブシステムはメインシステム停止を、プログラム実行中のメインＣＰＵ１０に通知する必要がある。ここでは、（４）で示したＭａｉｌＢｏｘを用いて、サブＣＰＵ２１はメインシステム停止をメインＣＰＵ１０に通知する。尚、ＭａｉｌＢｏｘによる通知以外の通知方法あるいは割り込みなども利用できる。メインＣＰＵ１０から停止許可の通知をサブＣＰＵ２１が受け取ると、サブＣＰＵ２１はＰＯＲ制御プログラムにおいて、メインシステム電源断を行うスクリプトプログラムを実行する。
【００５３】
（５−３）メインシステム１の停止状態からの復帰（システム再起動）
この場合、メインシステム１のみ停止状態で、サブシステム２は（５−１）の起動後の状態から、ＰＯＲ制御プログラム実行待ちになり、メインシステム起動イベントが発生した後は（５−１）と同じである。
【００５４】
（５−４）システム起動状態からメインシステム１のリセット及びシステム再起動
（５−１）のようにメインシステム１が起動後、メインシステム１にリセットイベントが発生した場合である。サブＣＰＵ２１はリセットイベントを検出すると、メインシステム１のリセット制御デバイス（周辺デバイス１２Ｄ）を制御するスクリプトプログラムを実行する。
【００５５】
以上の説明はこの発明の実施の形態であって、この発明の装置及び方法を限定するものではなく、様々な変形例を容易に実施することができる。
【図面の簡単な説明】
【００５６】
【図１】本発明の一実施形態に係るコンピュータシステム１００の全体構成を示すブロック図である。
【図２】このメインＣＰＵの第１の起動方法を示すフローチャートである。
【図３】ブートコード、ブートコードの属性及びアドレス情報を含むブートコード情報テーブルを示す図である。
【図４】このメインＣＰＵの第２の起動方法を示すフローチャートである。
【図５】このメインＣＰＵの第３の起動方法を示すフローチャートである。
【符号の説明】
【００５７】
１…メインシステム、２…サブシステム、１０…メインＣＰＵ、１１Ａ、１１Ｂ…メインシステムメモリ、１２Ａ〜１２Ｄ周辺デバイス、１３…メインシステムＲＯＭ、２１…サブＣＰＵ、２２…サブシステム、２４…サブシステムＲＡＭ、３０…シリアルバス、３１…パラレルバス、４０…ブートコード情報テーブル。
【図１】
2007206885.tif 000003
【図２】
2007206885.tif 000004
【図３】
2007206885.tif 000005
【図４】
2007206885.tif 000006
【図５】
2007206885.tif 000007