(57)【要約】  アクセス監視部（１１）は、ＣＰＵ（１）から周辺デバイス（３）に向けて出力されるアクセス信号から、監視アドレス設定部（１０）に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得し、アクセス判断部（１３）は、アクセス監視部（１１）から受け取ったアクセス情報と、アクセス記憶部（１２）に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、取得したアクセス情報をアクセス記憶部（１２）に記憶するとともに、例外発生部（１４）に例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、アクセス記憶部（１２）に記憶されている直前のアクセス情報を比較の対象から除外する。この構成により、エミュレーションする際の処理量を削減することができ、効率的に周辺装置のエミュレーションを行うことができる。
2009144892.tif 000002
【特許請求の範囲】
【請求項１】
例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援装置であって、
エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶部と、
前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視部と、
前記アクセス監視部によって取得されたアクセス情報を記憶するアクセス記憶部と、
前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶部と、
前記ＣＰＵに例外を発生させるための前記例外発生通知を前記ＣＰＵへ送信する例外発生部と、
前記アクセス監視部によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記例外発生部に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断部と、
前記アクセス監視部によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視部によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了部とを備えることを特徴とするデバイスエミュレーション支援装置。
【請求項２】
前記アクセス記憶部が前記アクセス判断部において比較の対象となる前記直前のアクセス情報を記憶している間、前記ＣＰＵへの割り込みを抑制する割り込み抑制部をさらに備えることを特徴とする請求項１記載のデバイスエミュレーション支援装置。
【請求項３】
前記ＣＰＵから前記周辺装置に向けて出力される前記アクセス信号を受信し、受信した前記アクセス信号を前記周辺装置に出力するか否かを判断するバス信号制御部をさらに備え、
前記アクセス監視部は、前記監視アドレス記憶部に記憶されているアドレスに合致しないアドレスを含むアクセス情報を、前記バス信号制御部に通知し、
前記バス信号制御部は、前記アクセス監視部から前記アクセス情報が通知された場合、当該アクセス情報を有する前記アクセス信号を前記周辺装置に出力することを特徴とする請求項１又は２記載のデバイスエミュレーション支援装置。
【請求項４】
前記ＣＰＵは、複数のＣＰＵを含み、
前記例外発生部は、前記複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ前記例外発生通知を送信することを特徴とする請求項１〜３のいずれかに記載のデバイスエミュレーション支援装置。
【請求項５】
前記アクセス情報は、アクセス対象である前記周辺装置に対応するアドレスと、前記アクセスが前記読み出しアクセス及び前記書き込みアクセスのいずれであるかを表すアクセス種別と、前記アクセス種別が前記書き込みアクセスである場合に前記周辺装置に書き込まれる値とを少なくとも含むことを特徴とする請求項１〜４のいずれかに記載のデバイスエミュレーション支援装置。
【請求項６】
前記ＣＰＵは、前記例外発生部によって出力された前記例外発生通知を受信した場合、例外を発生することによりエミュレーション処理を実行し、その後、前記周辺装置に出力された前記アクセス信号と同じアクセス信号を再び前記周辺装置へ出力することを特徴とする請求項１〜５のいずれかに記載のデバイスエミュレーション支援装置。
【請求項７】
エミュレーション対象の周辺装置に対応するアドレスを監視の対象として監視アドレス記憶部に記憶する監視アドレス記憶ステップと、
ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視ステップと、
前記アクセス監視ステップにおいて取得されたアクセス情報をアクセス記憶部に記憶するアクセス記憶ステップと、
前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータをリードデータ記憶部に一時的に記憶するリードデータ記憶ステップと、
前記アクセス監視ステップにおいて取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較するアクセス判断ステップと、
受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生ステップと、
受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外する除外ステップと、
前記アクセス監視ステップにおいて監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視ステップにおいて監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了ステップとを含むことを特徴とするデバイスエミュレーション支援方法。
【請求項８】
例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援回路であって、
エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶回路と、
前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶回路に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視回路と、
前記アクセス監視回路によって取得されたアクセス情報を記憶するアクセス記憶回路と、
前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶回路と、
前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生回路と、
前記アクセス監視回路によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶回路に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶回路に記憶するとともに、前記例外発生回路に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶回路に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断回路と、
前記アクセス監視回路によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶回路に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視回路によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了回路とを備えることを特徴とするデバイスエミュレーション支援回路。
【請求項９】
ＣＰＵと、
前記ＣＰＵによって制御される周辺装置と、
前記ＣＰＵから出力された前記アクセス信号を前記周辺装置に伝達するバスと、
請求項１〜６のいずれかに記載のデバイスエミュレーション支援装置とを備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアが実行中に利用する周辺装置のエミュレーションを容易にするデバイスエミュレーション支援装置、デバイスエミュレーション支援方法及びデバイスエミュレーション支援回路、並びに当該デバイスエミュレーション支援装置を備える情報処理装置に関するものである。
【背景技術】
【０００２】
情報処理装置で実行されるプログラムは、情報処理装置が備える１つ以上のデバイス（周辺装置）を利用しながら動作する。そのため、特定の情報処理装置を前提に作成されたプログラムは、処理対象のデバイスが存在しない場合、あるいは、処理対象のデバイスと同種のデバイスが存在しても制御の方法や仕様が異なる場合、正常に動作しない。このような場合、処理対象のデバイスのエミュレーションをプログラムの変更なしに行うことができれば、特定の情報処理装置とは別の情報処理装置でそのプログラムを利用することが可能となる。【０００３】
一般に、中央演算装置（ＣＰＵ）のアドレス空間にデバイスの制御レジスタが配置され、ＣＰＵが制御レジスタを操作することで、対象のデバイスは動作する。つまり、ＣＰＵは、対象デバイスの制御レジスタのアドレスに対し、書き込み（ライト）、または、読み出し（リード）を行う。従って、ソフトウェアでデバイスのエミュレーションを行うには、特定のアドレス、つまり、エミュレーション対象デバイスの制御レジスタのアドレスに対する、ＣＰＵからのアクセスを捕らえる（トラップする）必要がある。エミュレーション対象デバイスとは、ソフトウェアが処理対象としているが実際には存在していないデバイスである。【０００４】
特定アドレスへのアクセスをトラップする一般的な方法としては、メモリ空間の保護機能を用いるものがある。すなわち、トラップするアドレスへのリードとライトとを禁止することで、そのアドレスへのアクセス時に例外が発生する。例外ハンドラを契機にしてエミュレーションを開始し、エミュレーション終了後に元のプログラムに復帰することで、当該プログラムを変更することなしにデバイスのエミュレーションが可能となる。【０００５】
また、バスを流れる信号を監視することで、ＣＰＵから特定のアドレス空間へのアクセスを検知するバス監視装置がある（例えば、特許文献１参照）。バス監視装置は、バスを流れる各種信号を監視し、設定された条件に一致した信号が検知された場合、ＣＰＵに割り込みを発生させる。これにより、ＣＰＵからの特定のアドレスへのアクセスをトラップすることができる。【０００６】
エミューションの対象であるデバイスが行う処理を、ソフトウェアがデバイスの代わりに行うことにより、デバイスのエミュレーションが行われる。ソフトウェアが代わりに処理を行うために、対象デバイスの制御レジスタに対するアクセスをトラップした後、当該アクセスがどのようなアクセスであるか、すなわちアクセスの内容を取得する必要がある。例えば、エミュレーション対象であるデバイスがＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）であり、デバイスが行う処理がメモリコピーである場合、エミュレーションを行うソフトウェアは、コピー対象のデータが格納されているメモリ上のアドレスなど、処理に必要となる情報を取得する。以下、エミュレーションの対象であるデバイスの制御レジスタを“仮想的なレジスタ”と表す。【０００７】
仮想的なレジスタへのアクセスがデータのライトである場合、エミュレーションを行うソフトウェアは、トラップした命令（書き込み命令）の内容を解析し、書き込むデータを保持している演算レジスタを特定する。また、エミュレーションを行うソフトウェアは、特定した演算レジスタからデータを取得し、取得したデータを対象のアドレスに書き込む処理を行う。【０００８】
仮想的なレジスタへのアクセスがデータのリードである場合、エミュレーションを行うソフトウェアは、トラップした命令（読み出し命令）の内容を解析し、読み出したデータの保存先（演算レジスタ及びメモリなど）を特定する。また、エミュレーションを行うソフトウェアは、読み出したデータを保存先に格納する処理を行う。【０００９】
しかしながら、従来の技術では、制御レジスタに対するアクセスをトラップする毎に、エミュレーションを行うソフトウェアが、トラップしたアクセスの内容を解析して必要なデータを取得するため、複数の命令を実行することになり、処理量が増加するという課題を有していた。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００６−１１３９０６号公報
【発明の概要】
【００１１】
本発明は、上記の課題を解決するためになされたもので、エミュレーションする際の処理量を削減することができ、効率的に周辺装置のエミュレーションを行うことができるデバイスエミュレーション支援装置、デバイスエミュレーション支援方法、デバイスエミュレーション支援回路及び情報処理装置を提供することを目的とするものである。
【００１２】
本発明の一局面に係るデバイスエミュレーション支援装置は、例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援装置であって、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶部と、前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視部と、前記アクセス監視部によって取得されたアクセス情報を記憶するアクセス記憶部と、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶部と、前記ＣＰＵに例外を発生させるための前記例外発生通知を前記ＣＰＵへ送信する例外発生部と、前記アクセス監視部によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記例外発生部に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断部と、前記アクセス監視部によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視部によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了部とを備える。
【００１３】
この構成によれば、監視アドレス記憶部には、エミュレーション対象の周辺装置に対応するアドレスが監視の対象として記憶される。ＣＰＵから周辺装置へのアクセスが監視され、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつＣＰＵから周辺装置に向けて出力されるアクセス信号から、監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報が取得される。アクセス記憶部には、取得されたアクセス情報が記憶される。また、リードデータ記憶部には、アクセスがデータの読み出しを表す読み出しアクセスである場合に、周辺装置から読み出されるデータが一時的に記憶される。取得されたアクセス情報を受け取り、受け取ったアクセス情報と、アクセス記憶部に記憶されている直前のアクセス情報とが比較される。受け取ったアクセス情報が直前のアクセス情報と異なる場合、取得したアクセス情報がアクセス記憶部に記憶されるとともに、ＣＰＵに例外を発生させるための例外発生通知がＣＰＵへ送信される。一方、受け取ったアクセス情報が直前のアクセス情報と同一の場合、アクセス記憶部に記憶されている直前のアクセス情報が比較の対象から除外される。監視されるアクセスが読み出しアクセスである場合、リードデータ記憶部に記憶されているデータがＣＰＵに出力されて読み出しアクセスを完了するようＣＰＵに指示される。また、監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、書き込みアクセスを完了するようＣＰＵに指示される。
【００１４】
すなわち、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と異なる場合、ＣＰＵに例外を発生させることによりエミュレーション処理を実行させる。一方、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と同一の場合、例外の終了に伴うアクセスの再実行と見なし、アクセスが読み出しアクセスである場合、所定のデータをＣＰＵに出力した後、読み出しアクセスを完了するようＣＰＵに指示し、アクセスが書き込みアクセスである場合、そのまま書き込みアクセスを完了するようＣＰＵに指示する。
【００１５】
本発明によれば、エミュレーションを行うＣＰＵによって、トラップしたアクセスの内容を解析して必要なデータを取得する処理が行われないので、エミュレーションする際の処理量を削減することができ、効率的に周辺装置のエミュレーションを行うことができる。
【００１６】
本発明の目的、特徴及び利点は、以下の詳細な説明と添付図面とによって、より明白となる。
【図面の簡単な説明】
【００１７】
【図１】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図２】本発明の実施の形態１におけるデバイスエミュレーション支援装置の動作を説明するためのフローチャートである。
【図３】本発明の実施の形態１におけるデバイスエミュレーション装置で用いるレジスタの構成の一例を示す図である。
【図４】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の一例を示す図である。
【図５】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の第１の変形例を示す図である。
【図６】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の第２の変形例を示す図である。
【図７】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のリードアクセス時のエミュレーション処理の一例を示すフローチャートである。
【図８】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のライトアクセス時のエミュレーション処理の一例を示すフローチャートである。
【図９】本発明の実施の形態２におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図１０】本発明の実施の形態２における、割り込み抑制部と割り込みコントローラとの接続例を示す図である。
【図１１】本発明の実施の形態３におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図１２】本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図１３】本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の一例を示す図である。
【図１４】本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の変形例を示す図である。
【図１５】本発明の実施の形態５におけるデバイスエミュレーション支援回路を備えた情報処理装置の構成を示す図である。
【発明を実施するための形態】
【００１８】
以下本発明の実施の形態について、図面を参照しながら説明する。尚、以下の実施の形態は、本発明を具体化した一例であって、本発明の技術的範囲を限定する性格のものではない。
【００１９】
（実施の形態１）
図１は、本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、ＣＰＵ（中央演算装置）１、メモリ２、周辺デバイス（周辺装置）３、バス４及びデバイスエミュレーション支援装置５を備えている。
【００２０】
ＣＰＵ１は、メモリ２に格納されているプログラムを実行することで、情報処理装置を制御する。また、ＣＰＵ１のアドレス空間は、周辺デバイス３の制御に必要なレジスタ（制御レジスタ）を含む。周辺デバイス３を制御する際、ＣＰＵ１で実行されるプログラムが、対象の周辺デバイス３に対応する制御レジスタのアドレスに対し、データをリード又はライトすることで、対象の周辺デバイス３を制御することができる。
【００２１】
メモリ２は、情報処理装置の実行する各種のプログラム及びデータを格納する記憶装置である。メモリ２は、ランダムアクセスメモリ（ＲＡＭ）またはフラッシュメモリなど任意の種類のメモリを使用することができる。また、メモリ２は、同種または異種のメモリを複数組み合わせたものであってもよい。さらに、メモリ２は、リードオンメモリ（ＲＯＭ）を含んでもよい。
【００２２】
周辺デバイス３は、各種の入出力装置などのデバイスであり、情報処理装置の使用目的に応じたものが利用される。ここでは、周辺デバイスＡと周辺デバイスＢと周辺デバイスＣとの３つの周辺デバイスを備えている一例を示している。
【００２３】
バス４は、ＣＰＵ１とメモリ２と周辺デバイス３とデバイスエミュレーション支援装置５とを互いに通信可能に接続しており、データをやり取りする伝送路である。つまり、ＣＰＵ１から周辺デバイス３へのアクセスは、バス４を介して行われる。
【００２４】
デバイスエミュレーション支援装置５は、ゲストプログラムを実行するＣＰＵ１のアドレス空間へのアクセスを監視し、ＣＰＵ１に対する例外処理を発生させる。これにより、デバイスエミュレーション支援装置５は、エミュレーションを行うプログラム（以下エミュレーションプログラムと呼ぶ）に特定のアドレスへのアクセスを通知し、エミュレーションプログラムの実行を支援する。
【００２５】
なお、ゲストプログラムとは、プログラム上では存在を前提としているが、情報処理装置が備えていない周辺デバイスの一部または全てを制御するためのプログラムである。ゲストプログラムは、情報処理装置が備える周辺デバイスを制御するためのプログラムと、情報処理装置が備えていない周辺デバイスを制御するためのプログラムとを含む。なお、ゲストプログラムは、情報処理装置が備えていない周辺デバイスを制御するためのプログラムのみであってもよい。
【００２６】
ゲストプログラムとエミュレーションプログラムとは、メモリ２に格納されており、ＣＰＵ１で実行される。ゲストプログラムをＣＰＵ１で実行する場合、存在しない周辺デバイスの制御レジスタへのアクセスをトラップし、対象のエミュレーションプログラムを実行する。これにより、存在しない周辺デバイスをソフトウェア的にエミュレーションすることができる。
【００２７】
デバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６を備えている。
【００２８】
監視アドレス設定部１０は、デバイスエミュレーション支援装置５が監視の対象とするアドレス範囲を保持する記憶部である。デバイスエミュレーション支援装置５は、監視アドレス設定部１０に設定されたアドレス範囲へのアクセスをトラップする。つまり、監視アドレス設定部１０は、エミュレーション対象の周辺デバイスに対応するアドレス範囲を保持している。より具体的には、監視アドレス設定部１０は、通常の周辺デバイス３の制御レジスタと同様に、トラップ対象のアドレスの範囲を設定する制御レジスタである。
【００２９】
監視アドレス設定部１０に設定されるアドレス範囲としては、例えば、アドレスの上限と下限とを示す値が用いられる。また、監視アドレス設定部１０に設定されるアドレス範囲として、開始アドレスと範囲の大きさとを示す値を用いてもよい。また、監視アドレス設定部１０へのアドレス範囲の設定は、例えば、エミュレーションプログラムの初期化時に行われる。更に、トラップ対象のアクセスをより詳細に指定するために、監視アドレス設定部１０は、アドレス範囲以外の条件をさらに設定してもよい。例えば、監視アドレス設定部１０は、リード命令、ライト命令、またはその両方をトラップの対象にするなどの設定が可能である。
【００３０】
アクセス監視部１１は、バス４上に流れる信号（アクセス信号）を監視し、監視アドレス設定部１０に設定されているアドレス範囲を含む条件に合致するアクセスの発生を検知する。この信号には、アクセス対象のアドレス、アクセスがリードであるかライトであるかを表す種別、及び、リードするデータまたはライトするデータのデータサイズなどのアクセス内容に関する情報（アクセス情報）が含まれている。そのため、アクセス監視部１１は、バス４上に流れる信号を監視することで、ＣＰＵ１による、アドレス空間へのアクセスのアクセス内容を検知することができる。また、アクセス監視部１１は、検知した条件に合致するアクセス内容を、アクセス判断部１３に通知する。
【００３１】
アクセス記憶部１２は、アクセス監視部１１によって検知された、監視アドレス設定部１０に設定されている条件に合致するアクセス内容を保持する。アクセス判断部１３は、アクセス監視部１１から通知されたアクセス内容を判断し、アクセス記憶部１２への格納処理を行う。アクセス記憶部１２には、常に監視アドレス設定部１０に設定されている条件に合致する直前のアクセス内容が保持される。
【００３２】
アクセス記憶部１２に記憶されるアクセス内容は、少なくとも、アクセス先のアドレスと、アクセスがリードであるかライトであるかを表す種別と、アクセスがライトの場合はライトする値（データ）とを含んでいる。また、アクセス記憶部１２に記憶されるアクセス内容は、例えば、リードまたはライトするデータのサイズを示す情報を含んでもよい。さらに、ＣＰＵ１からアクセス記憶部１２に保持されている直前のアクセス内容を参照可能にするために、ＣＰＵ１のアドレス空間は、直前のアクセス内容を取得できるレジスタを有する。エミュレーションプログラムを実行するＣＰＵ１は、このアクセス内容を参照し、周辺デバイスのエミュレーションを行う。
【００３３】
アクセス判断部１３は、アクセス監視部１１によって検知された、監視アドレス設定部１０に設定されている条件に合致するアクセス内容を受け取り、受け取ったアクセス内容が、アクセス記憶部１２に記憶している直前のアクセス内容（前回トラップされたアクセス内容）と同じか否かを判断する。デバイスエミュレーション支援装置５は、ＣＰＵ１での例外の発生により、ＣＰＵ１にエミュレーションプログラムを実行させる。そして、例外処理終了後に、ＣＰＵ１は、エミュレーション対象周辺デバイスへのアクセスを発生させた命令に復帰し、その命令を再実行する。つまり、アクセス判断部１３は、取得したアクセス内容が直前のアクセス内容と異なる場合に、命令を再実行させると判断する。
【００３４】
命令を再実行させると判断した場合、アクセス判断部１３は、アクセス記憶部１２に新しいアクセス内容を格納し、例外発生部１４に例外の発生を要求する。一方、命令を再実行させない、すなわち今回受け取ったアクセス内容が、直前のアクセス内容と同一であると判断した場合、アクセス判断部１３は、アクセス記憶部１２に記憶されている直前のアクセス内容を消去し、アクセス完了部１６にアクセス内容を通知する。これにより、以後は、受け取ったアクセス内容が、記憶されている直前のアクセス内容と同じであっても、当該受け取ったアクセス内容は新たなアクセスと判断されるようになる。
【００３５】
すなわち、アクセス判断部１３は、アクセス監視部１１によって取得されたアクセス内容を受け取り、受け取ったアクセス内容と、アクセス記憶部１２に記憶されている直前のアクセス内容とを比較する。受け取ったアクセス内容が直前のアクセス内容と異なる場合、アクセス判断部１３は、取得したアクセス内容をアクセス記憶部１２に記憶するとともに、例外発生部１４に例外発生通知の送信を要求する。一方、受け取ったアクセス内容が直前のアクセス内容と同一の場合、アクセス判断部１３は、アクセス記憶部１２に記憶されている直前のアクセス内容を比較の対象から除外する。
【００３６】
なお、本実施の形態１では、直前のアクセス内容を消去しているが、必ずしも記憶内容そのものを消去する必要はない。直前のアクセス内容の消去とは、アクセス判断部１３による比較の対象から外すことを意味する。
【００３７】
例外発生部１４は、アクセス判断部１３によって今回のアクセス内容が前回のアクセス内容と異なると判断された場合に、アクセス判断部１３から例外発生要求を受け取り、例外を発生させるための例外通知をＣＰＵ１に出力する。具体的には、例外発生部１４は、データアボートなどのＣＰＵ１に例外を発生させることができる特定の信号をバス４に出力する。また、ＣＰＵ１の例外発生に関係する端子に、例外発生部１４を直接接続し、例外発生部１４からＣＰＵ１に例外通知を出力する構成を用いてもよい。この例外を契機に、ＣＰＵ１は、エミュレーションプログラムを動作させる。
【００３８】
リードデータ設定部１５は、トラップしたアクセスがリード命令であった場合に、周辺デバイス３から読み出されるデータを一時的に保持する。リードデータ設定部１５へのデータの設定は、エミュレーションプログラム（ＣＰＵ１）が行う。ＣＰＵ１からデータの設定を可能とするために、ＣＰＵ１のアドレス空間は、データを設定するレジスタを有する。
【００３９】
アクセス完了部１６は、アクセス判断部１３によって今回のアクセス内容が直前のアクセス内容と同一である、つまり命令を再実行させないと判断された場合に、アクセス判断部１３から通知されるアクセス内容を受け取る。アクセス判断部１３から通知されたアクセス内容に含まれる種別がリードである時、つまりゲストプログラム（ＣＰＵ１）が、存在しない周辺デバイスの制御レジスタからデータをリードするリードアクセスが発生した時、アクセス完了部１６は、ＣＰＵ１のリードアクセスを完了させる。
【００４０】
すなわち、アクセス完了部１６は、アクセス監視部１１によって監視されるアクセスが読み出しアクセスである場合、リードデータ設定部１５に記憶されているデータをＣＰＵ１に出力して読み出しアクセスを完了するようＣＰＵ１に指示する。また、アクセス完了部１６は、アクセス監視部１１によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、書き込みアクセスを完了するようＣＰＵ１に指示する。
【００４１】
具体的には、アクセス完了部１６は、リードデータ設定部１５に保持されているデータを取得し、バス４に信号として出力する。つまり、アクセス完了部１６は、エミュレーションプログラムが設定したデータを、存在しない周辺デバイスの制御レジスタに対するリードアクセスの結果として、ゲストプログラムに受け取らせる。
【００４２】
一方、アクセス判断部１３から通知されたアクセス内容に含まれる種別がライトである時、つまりゲストプログラム（ＣＰＵ１）が、存在しない周辺デバイスの制御レジスタにデータをライトするライトアクセスが発生した時、アクセス完了部１６は、ＣＰＵ１のライトアクセスを完了させる。具体的には、アクセス完了部１６は、バス４にデータ受け取り完了の信号を出力する。
【００４３】
なお、本実施の形態１において、監視アドレス設定部１０が監視アドレス記憶部の一例に相当し、アクセス監視部１１がアクセス監視部の一例に相当し、アクセス記憶部１２がアクセス記憶部の一例に相当し、リードデータ設定部１５がリードデータ記憶部の一例に相当し、例外発生部１４が例外発生部の一例に相当し、アクセス判断部１３がアクセス判断部の一例に相当し、アクセス完了部１６がアクセス完了部の一例に相当する。
【００４４】
図２は、ゲストプログラムが動作している際の、デバイスエミュレーション支援装置５の動作を説明するためのフローチャートである。まず、ＣＰＵ１がゲストプログラムの動作を開始し、デバイスエミュレーション支援装置５が処理を開始する。なお、デバイスエミュレーション支援装置５を備えた情報処理装置が、起動時に初期化処理を行うことで、デバイスエミュレーション支援装置５の処理を開始してもよい。
【００４５】
まず、アクセス監視部１１は、バス４上に流れる信号を監視し、アクセスが発生したか否かを判断する（ステップＳ１）。アクセスが発生していない場合（ステップＳ１でＮＯ）、アクセス監視部１１は、アクセスが発生するまで、監視を継続する。アクセスが発生した場合（ステップＳ１でＹＥＳ）、アクセス監視部１１は、発生したアクセスのアクセス内容を取得する（ステップＳ２）。
【００４６】
次に、アクセス監視部１１は、発生したアクセスがトラップ対象のアクセスであるか否かを判断する（ステップＳ３）。すなわち、アクセス監視部１１は、取得したアクセス内容に含まれるアドレスが、監視アドレス設定部１０に設定されているトラップ対象のアドレス範囲に合致するか否かを判断し、アドレスが合致するアクセス（トラップ対象のアクセス）の発生を検知する。なお、監視アドレス設定部１０に、アドレス範囲以外の条件も設定されている場合、アクセス監視部１１は、それらの条件についても、合致しているか否かを判断する。発生したアクセスがトラップ対象のアクセスでない場合（ステップＳ３でＮＯ）、ステップＳ１の処理に遷移し、処理を繰り返す。
【００４７】
一方、発生したアクセスがトラップ対象のアクセスである場合（ステップＳ３でＹＥＳ）、アクセス監視部１１は、発生したアクセスのアクセス内容を、アクセス判断部１３に通知する（ステップＳ４）。
【００４８】
次に、アクセス判断部１３は、アクセス監視部１１から通知されたアクセス内容と、アクセス記憶部１２に記憶している直前のアクセス（前回トラップされたアクセス）のアクセス内容とを比較する。すなわち、アクセス判断部１３は、今回発生したアクセスが、アクセス記憶部１２に記憶している直前のアクセスと同じであるか否かを判断する（ステップＳ５）。
【００４９】
なお、アクセス判断部１３は、少なくともアクセス先のアドレスを比較しているが、アクセスが同一命令によるものかの判断に用いることができる他の情報を比較してもよい。リードするデータサイズ及びライトするデータサイズを指定できる命令セットを有するＣＰＵの場合、データサイズを判断に用いてもよい。また、バースト転送の可能な情報処理装置ならば、バースト転送の有無及び転送サイズを判断に用いてもよい。
【００５０】
発生したアクセスが直前のアクセスと異なっていると判断した場合（ステップＳ５でＮＯ）、アクセス判断部１３は、アクセス記憶部１２に新しいアクセスのアクセス内容を直前のアクセスのアクセス内容として格納し、例外を発生させるための例外発生要求を例外発生部１４に出力する（ステップＳ６）。例外発生部１４は、アクセス判断部１３によって出力された例外発生要求を受け取り、例外を発生させるための例外通知をＣＰＵ１に出力する（ステップＳ７）。
【００５１】
一方、発生したアクセスが直前のアクセスと同じであると判定した場合（ステップＳ５でＹＥＳ）、アクセス判断部１３は、命令の再実行と判断し、アクセス記憶部１２に記憶されている直前のアクセスのアクセス内容を消去し、アクセス完了部１６に新しいアクセスのアクセス内容を通知する（ステップＳ８）。
【００５２】
次に、アクセス完了部１６は、アクセス判断部１３によって通知されたアクセス内容が、データをメモリから読み出すリードアクセス及びデータをメモリに書き込むライトアクセスのいずれであるかを判断する（ステップＳ９）。
【００５３】
アクセス内容がリードアクセスであると判断した場合（ステップＳ９で“リードアクセス”）、アクセス完了部１６は、リードデータ設定部１５に保持されているリードデータを取得し、取得したリードデータをバス４に出力する（ステップＳ１０）。次に、アクセス完了部１６は、再実行されたリードアクセスを完了し（ステップＳ１１）、ステップＳ１の処理に戻す。これにより、ステップＳ１以降の処理が繰り返し実行される。
【００５４】
一方、アクセス内容がライトアクセスであると判断した場合（ステップＳ９で“ライトアクセス”）、アクセス完了部１６は、再実行されたライトアクセスを完了し（ステップＳ１２）、ステップＳ１の処理に戻す。これにより、ステップＳ１以降の処理が繰り返し実行される。
【００５５】
なお、ゲストプログラムが動作を終了した際に、デバイスエミュレーション支援装置５は、アクセスの監視を終了し、図２に示した処理を完了する。また、デバイスエミュレーション支援装置５を備えた情報処理装置の起動中は、デバイスエミュレーション支援装置５がアクセスの監視を継続する実装でもよい。
【００５６】
図３は、本発明の実施の形態１におけるデバイスエミュレーション支援装置５で用いるレジスタの構成の一例を示す図である。前述したとおり、ＣＰＵ１による処理（リード処理又はライト処理）を可能とするため、複数のレジスタがＣＰＵ１のアドレス空間に配置されている。
【００５７】
監視アドレス設定部１０は、トラップ対象のアドレス範囲を設定するレジスタである。図３に示すように、監視アドレス設定部１０は、対象とする監視アドレス領域の先頭アドレスと、監視アドレス領域のサイズとを組みにして保持している。監視アドレス設定部１０は、複数の組みを保持することが可能である。
【００５８】
アクセス記憶部１２は、トラップしたアクセスのアクセス内容を記憶するレジスタである。アクセス記憶部１２は、アクセスが発生してから完了するまで、処理中のアクセスのアクセス内容を保持している。図３に示すように、アクセス記憶部１２は、アクセス内容として、アクセス先のアドレスと、リードアクセスであるかライトアクセスであるかを表すアクセス種別と、アクセス種別がライトアクセスである場合のライトする値（ライトデータ）とを記憶している。
【００５９】
リードデータ設定部１５は、トラップしたアクセスがリードアクセスである場合に、ＣＰＵ１にリードさせるデータ（リードデータ）を設定するレジスタである。
【００６０】
なお、アクセス記憶部１２のライトデータと、リードデータ設定部１５のリードデータとは、ＣＰＵ１によるバーストリード処理及びバーストライト処理に対応するため、バースト転送の最大サイズまでのレジスタ数を設けている。
【００６１】
図４は、本実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェア構成の一例を示す図である。
【００６２】
図４では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとする。つまり、デバイスドライバ２０は、ゲストプログラムであり、存在していない周辺デバイスへアクセスする。
【００６３】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５が動作する。デバイスエミュレーション支援装置５は、ＣＰＵ１に例外通知を出力して、ＣＰＵ１に例外を発生させる。ＣＰＵ１からの例外を受けてＯＳ２１内の例外ハンドラ２３が動作する。例外ハンドラ２３は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断し、デバイスエミュレーション支援装置５によって発生した例外の場合、エミュレーションプログラム２４を動作させる。
【００６４】
エミュレーションプログラム２４は、デバイスエミュレーション支援装置５のアクセス記憶部１２から、アクセス内容を取得し、エミュレーションを行う周辺デバイスを特定し、特定した周辺デバイスに対応するエミュレーションを行う。これにより、情報処理装置は、ゲストプログラムであるデバイスドライバ２０をそのまま利用できる。したがって、例えばアプリケーション２２がデバイスドライバ２０の仕様に依存するものであっても、デバイスドライバ２０との依存関係を改変することなく情報処理装置を動作させることができる。
【００６５】
図５は、本実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェア構成の第１の変形例を示す図である。
【００６６】
図５では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとする。ゲストプログラム２５は、デバイスドライバ２０と、ＯＳ２１と、アプリケーション２２とを含む。つまり、備えている周辺デバイスが互いに異なるハードウェアを前提に作られたソフトウェアのシステム全体がゲストプログラムとなる。図５では、情報処理装置は、周辺デバイスのエミュレーションを制御する仮想化層２６を有しており、仮想化層２６は、例外制御部２７を備えている。
【００６７】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外通知を出力して、ＣＰＵ１に例外を発生させる。ＣＰＵ１は、例外通知を受け取ると、仮想化層２６の例外制御部２７に対して例外処理の実行を指示する。仮想化層２６は、ＣＰＵ１からの例外処理の実行指示を受けて、例外制御部２７を最初に動作させる。
【００６８】
例外制御部２７は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断する。デバイスエミュレーション支援装置５によって発生した例外の場合、例外制御部２７は、エミュレーションプログラム２４を動作させる。デバイスエミュレーション支援装置５によって発生した例外でない場合、例外制御部２７は、ＯＳ２１内の例外ハンドラ２３へ制御を移す。これにより、ゲストプログラム２５内のデバイスドライバ２０が周辺デバイスにアクセスした時に、エミュレーションプログラム２４が動作する。
【００６９】
図６は、本実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェア構成の第２の変形例を示す図である。
【００７０】
図６では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとする。また、仮想化層２６は、複数の仮想計算機を制御する。この仮想化層２６は、ハイパバイザーと呼ばれており、一つの物理的な計算機の上で複数の仮想的な計算機（仮想計算機）を実行制御する。図６では、情報処理装置は、第１の仮想計算機２８及び第２の仮想計算機２９を備える。第１の仮想計算機２８がゲストプログラムとして動作する。第２の仮想計算機２９は、エミュレーションプログラム２４を実行する。
【００７１】
仮想化層２６は、エミュレーションプログラム２４を実行する第２の仮想計算機２９と、ゲストプログラム２５を実行する第１の仮想計算機２８とを時分割で動作させる機能を有する。更に、仮想化層２６は、例外制御部２７を備えている。
【００７２】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外通知を出力して、ＣＰＵ１に例外を発生させる。ＣＰＵ１は、例外通知を受け取ると、仮想化層２６の例外制御部２７に対して例外処理の実行を指示する。仮想化層２６は、ＣＰＵ１からの例外処理の実行指示を受けて、例外制御部２７を最初に動作させる。
【００７３】
例外制御部２７は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断する。デバイスエミュレーション支援装置５によって発生した例外の場合、例外制御部２７は、エミュレーションプログラム２４を動作させる。デバイスエミュレーション支援装置５によって発生した例外でない場合、例外制御部２７は、ＯＳ２１内の例外ハンドラ２３へ制御を移す。これにより、ゲストプログラム２５内のデバイスドライバ２０が周辺デバイスにアクセスした時に、エミュレーションプログラム２４が動作する。
【００７４】
なお、周辺デバイスには、ＤＭＡ、デコードエンジン及びエンコードエンジンのように、ＣＰＵと平行して動作するものがある。このような周辺デバイスをエミュレーションする場合、ゲストプログラムの実行と、周辺デバイスのエミュレーションによるデータの処理とを並行して行うのが望ましい。図６に示すソフトウェア構成を用いる場合、ゲストプログラム２５とエミュレーションプログラム２４とを時分割的に並行して動作させることが可能となる。
【００７５】
図７は、本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のリードアクセス時のエミュレーション処理の一例を示すフローチャートである。図７では、リードアクセスのエミュレーションについて示している。
【００７６】
ＣＰＵ１は、ゲストプログラムを実行し、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタからデータを読み出すリードアクセスを実行する（ステップＳ２１）。
【００７７】
次に、デバイスエミュレーション支援装置５は、このリードアクセスの発生を検知することでリードアクセスのアクセス内容をトラップし、トラップしたアクセス内容をアクセス記憶部１２に記憶する（ステップＳ２２）。次に、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外を発生させる（ステップＳ２３）。なお、ステップＳ２２の処理は、前述した図２のステップＳ１〜Ｓ５の処理に相当し、ステップＳ２３の処理は、前述した図２のステップＳ６〜Ｓ７の処理に相当する。
【００７８】
なお、ここで発生する例外は、ステップＳ２１のリードアクセスが発生したタイミングで、例外ハンドラ２３と例外制御部２７とへ制御を移し、かつ、アクセスを発生させた命令を無効化する性質を有する必要がある。データアボート例外は、前述した性質を持つ例外であることが多い。デバイスエミュレーション支援装置５は、ＣＰＵ１の仕様において、前述した性質を有する例外を発生させる。
【００７９】
次に、例外ハンドラ２３又は例外制御部２７は、ＣＰＵ１からの例外処理の実行指示を受け、発生した例外がデバイスエミュレーション支援装置５により発生した例外と判断し、エミュレーションプログラム２４を呼び出す（ステップＳ２４）。なお、エミュレーションプログラム２４を呼び出す方法の例は、既に、図４〜図６のソフトウェア構成の例で示している。
【００８０】
次に、ＣＰＵ１は、呼び出されたエミュレーションプログラム２４を実行し、トラップしたアクセス内容を取得する（ステップＳ２５）。具体的には、エミュレーションプログラム２４を実行したＣＰＵ１は、アクセス記憶部１２の制御レジスタから、アクセス先のアドレスを含むアクセス内容を取得する。
【００８１】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、取得したアクセス内容を用いて、存在しない周辺デバイスのエミュレーション処理を実行する（ステップＳ２６）。エミュレーションプログラム２４を実行したＣＰＵ１は、ゲストプログラムを実行することによって発行されたリードアクセスのアクセス内容を取得済みなので、取得した情報（リードアクセスのアクセス内容）を用いて周辺デバイスが行う処理をエミュレートし、仮想的な制御レジスタにアクセスする際にリードされるべきリードデータを用意する。
【００８２】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、用意したリードされるべきリードデータをリードデータ設定部１５に設定する（ステップＳ２７）。そして、エミュレーションプログラム２４を実行したＣＰＵ１は、周辺デバイスのエミュレーション処理を終了させる。次に、例外ハンドラ２３又は例外制御部２７は、ゲストプログラムを復帰させる（ステップＳ２８）。この時、ＣＰＵ１は、ゲストプログラムを再度実行することにより、ステップＳ２１のリードアクセスを発生させた命令に復帰することになる。
【００８３】
すなわち、ＣＰＵ１は、例外発生部１４によって出力された例外発生通知を受信した場合、例外を発生することによりエミュレーション処理を実行し、その後、周辺デバイス３に出力されたアクセス信号と同じアクセス信号を再び周辺デバイス３へ出力する。
【００８４】
同じ命令に復帰したので、ゲストプログラムを実行したＣＰＵ１は、再び、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタからデータを読み出すリードアクセスを実行する（ステップＳ２９）。すなわち、ステップＳ２９におけるリードアクセスは、ステップＳ２１におけるリードアクセスと同じ処理である。
【００８５】
次に、デバイスエミュレーション支援装置５は、このリードアクセスの発生を検知することでリードアクセスのアクセス内容をトラップし、ステップＳ２２で記憶した直前のアクセス内容を、アクセス記憶部１２から消去する（ステップＳ３０）。つまり、トラップしたアクセス内容が、ステップＳ２２で記憶した直前のアクセスのアクセス内容と同じなので、例外は発生しない。ステップＳ３０の処理は、前述した図２のステップＳ１〜Ｓ５及びＳ８の処理に相当する。
【００８６】
次に、デバイスエミュレーション支援装置５は、ステップＳ２７において設定されたリードデータをバス４に出力する（ステップＳ３１）。ステップＳ３１の処理は、前述した図２のステップＳ１０の処理に相当する。
【００８７】
最後に、ゲストプログラムを実行したＣＰＵ１は、バス４に出力されたリードデータをリードアクセスの結果として受け取り、エミュレーション対象である周辺デバイスのアドレス領域からデータを読み出すリードアクセスを完了する（ステップＳ３２）。
【００８８】
以上により、本実施の形態１のデバイスエミュレーション支援装置によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析及び命令の内容の取得などの、仮想的なレジスタへのアクセスに関する処理を削減することができる。つまり、従来の技術では、仮想的なレジスタのエミュレーションをソフトウェアで行う場合、図７のステップＳ２５で例外を発生させた命令をソフトウェアで解析する処理が必要となる。この解析処理として、少なくとも読み出すデータの格納先を特定する処理と、特定した格納先へデータを格納する処理とが行われる。
【００８９】
一方、本実施の形態１では、周辺デバイスのエミュレーションを、ステップＳ２７のリードデータ設定部１５へのデータの書き込みと、ステップＳ２９の命令再実行のオーバヘッドとで実現している。また、リード先アドレスのインクリメント及びデクリメントなどが自動で行われる命令の場合、命令が再実行されるので、エミュレーションにおいてリード先アドレスのインクリメント及びデクリメントなどを特に処理する必要はない。
【００９０】
図８は、本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のライトアクセス時のエミュレーション処理の一例を示すフローチャートである。図８は、ライトアクセスのエミュレーションについて示している。
【００９１】
ＣＰＵ１は、ゲストプログラムを実行し、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタにデータを書き込むライトアクセスを実行する（ステップＳ４１）。
【００９２】
次に、リードアクセス時と同様に、デバイスエミュレーション支援装置５は、このライトアクセスの発生を検知することでライトアクセスのアクセス内容をトラップし、アクセス記憶部１２にトラップしたアクセス内容を記憶する（ステップＳ４２）。次に、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外を発生させる（ステップＳ４３）。なお、ステップＳ４２の処理は、前述した図２のステップＳ１〜Ｓ５の処理に相当し、ステップＳ４３の処理は、前述した図２のステップＳ６〜Ｓ７の処理に相当する。
【００９３】
次に、例外ハンドラ２３又は例外制御部２７は、ＣＰＵ１からの例外処理の実行指示を受け、発生した例外がデバイスエミュレーション支援装置５により発生した例外と判断し、エミュレーションプログラム２４を呼び出す（ステップＳ４４）。
【００９４】
次に、ＣＰＵ１は、呼び出されたエミュレーションプログラム２４を実行し、トラップしたアクセスのアクセス内容を取得する（ステップＳ４５）。具体的には、エミュレーションプログラム２４を実行したＣＰＵ１は、アクセス記憶部１２の制御レジスタから、アクセス先のアドレスと、ライトされたデータとを含むアクセス内容を取得する。
【００９５】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、取得したアクセス内容を用いて、存在しない周辺デバイスのエミュレーション処理を実行する（ステップＳ４６）。エミュレーションプログラム２４を実行したＣＰＵ１は、ゲストプログラムを実行することによって発行されたライトアクセスのアクセス内容を取得済みなので、取得した情報（ライトアクセスのアクセス内容）を用いて周辺デバイスが行う処理をエミュレートする。このステップＳ４６の処理は、エミュレーション対象である周辺デバイスが、ＣＰＵと平行して動作する場合、周辺デバイスの処理を開始する処理となる。つまり、ＤＭＡをエミュレーションする場合、ステップＳ４６の処理は、データコピーを開始する処理となる。
【００９６】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、周辺デバイスのエミュレーション処理を終了させる。次に、例外ハンドラ２３又は例外制御部２７は、ゲストプログラムを復帰させる（ステップ４７）。この時、リードアクセス時と同様に、ＣＰＵ１は、ゲストプログラムを再度実行することにより、ステップＳ４１のライトアクセスを発生させた命令に復帰することになる。
【００９７】
同じ命令に復帰したので、ゲストプログラムを実行したＣＰＵ１は、再び、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタにデータを書き込むライトアクセスを実行する（ステップＳ４８）。
【００９８】
次に、デバイスエミュレーション支援装置５は、このライトアクセスの発生を検知することでライトアクセスのアクセス内容をトラップし、ステップＳ４２で記憶した直前のアクセス内容を、アクセス記憶部１２から消去する（ステップＳ４９）。つまり、トラップしたアクセス内容が、ステップＳ４２で記憶した直前のアクセスのアクセス内容と同じなので、例外は発生しない。ステップＳ４９の処理は、前述した図２のステップＳ１〜Ｓ５及びＳ８の処理に相当する。
【００９９】
次に、デバイスエミュレーション支援装置５は、アクセスが完了したことを表すアクセス完了信号をバス４に出力し、このライトアクセスを無視する（ステップＳ５０）。ステップＳ５０の処理は、前述した図２のステップＳ１２の処理に相当する。
【０１００】
最後に、ゲストプログラムを実行したＣＰＵ１は、バス４に出力されたアクセス完了信号を受け取り、エミュレーション対象である周辺デバイスのアドレス領域にデータを書き込むライトアクセスを完了する（ステップＳ５１）。
【０１０１】
以上により、本実施の形態１のデバイスエミュレーション支援装置によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析及び命令の内容の取得などの、仮想的なレジスタへのアクセスに関する処理を削減することができる。つまり、リードアクセス時と同様に、従来の技術では、エミュレーションを行うソフトウェアが、命令を解析する処理、ライトするデータの格納先を特定する処理、及び、レジスタをインクリメント又はデクリメントする処理を行う必要がある。
【０１０２】
一方、本実施の形態１では、周辺デバイスのエミュレーションを、アクセス記憶部１２からのデータの読み出しと、命令再実行のオーバヘッドとで実現している。
【０１０３】
以上、本実施の形態１によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析及び命令の内容の取得などの仮想的なレジスタへのアクセスに関する処理を削減することで、効率的な周辺デバイスのエミュレーションが可能になる。ここで削減できる処理は、アクセス内容を取得するためのソフトウェアによる命令の解析、ソフトウェアによるリード時の結果の格納、及びライト時のデータの取得といった処理である。
【０１０４】
（実施の形態２）
図９は、本発明の実施の形態２におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、ＣＰＵ１、メモリ２、周辺デバイス３、バス４、デバイスエミュレーション支援装置５及び割り込みコントローラ６を備えている。
【０１０５】
ＣＰＵ１とメモリ２とバス４とは、図１の構成要素と同じ機能を有している。また、周辺デバイス３には、割り込みを用いて制御される周辺デバイスを含んでいる。本実施の形態２では、周辺デバイスＤと周辺デバイスＥとが、割り込みを用いて制御される周辺デバイスである。
【０１０６】
割り込みコントローラ６は、バス４とは異なる別の回路を介して、周辺デバイス３の中で割り込みを用いて制御される周辺デバイスＤ，Ｅと直接接続されている。割り込みコントローラ６は、ＣＰＵ１への割り込み信号を発生させることで、ＣＰＵ１に割り込み処理を行わせる。
【０１０７】
本実施の形態２のデバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５、アクセス完了部１６及び割り込み抑制部１７を備えている。監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６は、実施の形態１の構成要素と同じ機能を有しており、割り込み抑制部１７が新規追加の構成要素である。以下、新規の構成要素である割り込み抑制部１７を中心に説明する。
【０１０８】
周辺デバイスのエミュレーション処理の実行中、つまり図７のステップＳ２４〜Ｓ２８の処理又は図８のステップＳ４４〜Ｓ４７の処理の間に割り込みが発生することがある。エミュレーションプログラム２４又は例外ハンドラ２３が実行される段階で、ＣＰＵ１を割り込み禁止にする、または、割り込みコントローラ６を操作して割り込みをマスクする。これにより、制御の複雑さが低減される。この場合、ゲストプログラムが元々割り込み禁止又は割り込みマスク状態であった場合を除き、ゲストプログラムに復帰する図７のステップＳ２８又は図８のステップＳ４７の段階において、割り込み禁止又は割り込みマスク状態を解除する必要がある。
【０１０９】
割り込み禁止又は割り込みマスクが行われている期間に割り込みが発生した場合、当該割り込みは保留された状態になる。割り込み禁止又は割り込みマスクの解除後、つまりゲストプログラムの復帰後即座に、ＣＰＵ１は、割り込み信号を感知し、割り込みハンドラを実行する。つまり、図７のステップＳ２９の処理又は図８のステップＳ４８の処理における命令再実行の前に、割り込みハンドラ実行処理に移る。ここで、もし実行される割り込みハンドラ内に、アクセス記憶部１２に記憶されている直前のアクセスと同じアクセス内容のアクセスを発生させる命令があると、このアクセス（割り込み）が命令再実行によるものと判断される虞がある。
【０１１０】
そこで、本実施の形態２の割り込み抑制部１７は、命令の再実行が完了するまで、つまり図７のステップＳ３２の処理又は図８のステップＳ５１の処理までの間、割り込み信号を抑制する。これにより、上記の課題を解決する。なお、本実施の形態２において、割り込み抑制部１７が割り込み抑制部の一例に相当する。
【０１１１】
割り込み抑制部１７は、バス４とは異なる別の回路を介して、割り込みコントローラ６と直接接続されており、ＣＰＵ１への割り込み信号を抑制させる機能を有している。なお、割り込みコントローラ６が、割り込み信号を抑制する機能を持たない場合でも、例えば図１０のように割り込み信号を伝達する配線の途中に割り込み抑制部１７を接続すればよい。
【０１１２】
図１０は、本発明の実施の形態２における、割り込み抑制部と割り込みコントローラとの接続例を示す図である。割り込み抑制部１７及び割り込みコントローラ６から出力される信号がレベル信号である場合、例えば、図１０に示すように単純な論理積回路７を設けることにより、割り込み信号を抑制する機能を実現することが可能である。このような構成により、割り込み禁止又は割り込みマスクが解除された時点では、割り込みコントローラ６での割り込みの保留の有無にかかわらず、ＣＰＵ１への割り込み信号はオフになるので、割り込みは発生しない。
【０１１３】
また、割り込みの抑制は、例えば、割り込み抑制部１７に制御レジスタを設け、当該制御レジスタの操作により開始すればよい。この場合、エミュレーションプログラムが実行されることにより割り込み抑制が開始される。あるいは、割り込み抑制部１７は、アクセスをトラップしたタイミング（図７のステップＳ２１又は図８のステップＳ４１）で、アクセス監視部１１から通知を受け、割り込み抑制を開始してもよい。
【０１１４】
さらに、割り込み抑制部１７は、アクセス記憶部１２に記憶されているアクセス内容が消去された時点でＣＰＵ１から通知を受け取ることで、割り込み抑制を解除する。これにより、命令再実行の完了時に、割り込み抑制が解除される。割り込みが保留されていた場合、命令再実行の完了後に、ＣＰＵ１は、割り込み信号を検知し、割り込み処理を実行する。
【０１１５】
以上のように、本実施の形態２では、ゲストプログラムによる、存在していない周辺デバイスの制御レジスタへのアクセスと同じアクセスを割り込みハンドラに設けることが可能となる。これにより、割り込みを用いて制御される周辺デバイスをエミュレーション対象の周辺デバイスとすることができる。
【０１１６】
（実施の形態３）
図１１は、本発明の実施の形態３におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、ＣＰＵ１、メモリ２、周辺デバイス３、バス４及びデバイスエミュレーション支援装置５を備えている。
【０１１７】
本実施の形態３では、周辺デバイス３は、デバイスエミュレーション支援装置５に直接接続しており、デバイスエミュレーション支援装置５を介してＣＰＵ１と接続している。つまり、デバイスエミュレーション支援装置５は、ＣＰＵ１と周辺デバイス３との間に配置される。なお、ＣＰＵ１とメモリ２とバス４とは、図１の構成要素と同じ機能を有している。また、周辺デバイス３は、デバイスエミュレーション支援装置５を介してバス４と接続している。
【０１１８】
本実施の形態３のデバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部３１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５、アクセス完了部１６及びバス信号制御部１８を備えている。監視アドレス設定部１０、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６は、実施の形態１の構成要素と同じ機能を有しており、アクセス監視部３１とバス信号制御部１８とが実施の形態１と異なっている。以下、アクセス監視部３１とバス信号制御部１８とを中心に説明する。
【０１１９】
本実施の形態３では、ＣＰＵ１からバス４に出力された信号は、まずデバイスエミュレーション支援装置５に伝達され、周辺デバイス３には伝達されない。
【０１２０】
アクセス監視部３１は、バス４上に流れる信号を監視し、監視アドレス設定部１０に設定されているアドレス範囲を含む条件に合致するアクセスの発生を検知する。この信号には、アクセス対象のアドレス、アクセスがリードであるかライトであるかを表す種別、及び、リードするデータまたはライトするデータのデータサイズなどのアクセス内容に関する情報が含まれている。そのため、アクセス監視部３１は、バス４上に流れる信号を監視することで、ＣＰＵ１による、アドレス空間へのアクセスを検知することができる。また、アクセス監視部３１は、検知した条件に合致するアクセス内容を、アクセス判断部１３に通知する。さらに、アクセス監視部３１は、条件に合致しなかったアクセス内容を、バス信号制御部１８に通知する。
【０１２１】
すなわち、アクセス監視部３１は、ＣＰＵ１から周辺デバイス３へのアクセスを監視し、ＣＰＵ１から周辺デバイス３に向けて出力されるアクセス信号から、監視アドレス設定部１０に記憶されているアドレスに合致するアドレスを含むアクセス内容を、アクセス記憶部１２及びアクセス判断部１３に出力する。また、アクセス監視部３１は、監視アドレス設定部１０に記憶されているアドレスに合致しないアドレスを含むアクセス内容を、バス信号制御部１８に通知する。
【０１２２】
バス信号制御部１８は、ＣＰＵ１から周辺デバイス３に向けて出力されるアクセス信号を受信し、受信したアクセス信号を周辺デバイス３に出力するか否かを判断する。バス信号制御部１８は、アクセス監視部３１からアクセス内容が通知された場合、当該アクセス内容を有するアクセス信号を周辺デバイス３に出力する。バス信号制御部１８は、アクセス監視部３１からアクセス内容の通知を受けて動作し、アクセスがトラップされなかった場合にのみ、ＣＰＵ１からの信号を周辺デバイス３に伝達する。つまり、デバイスエミュレーション支援装置５によりアクセスがトラップされた場合、周辺デバイス３には、ＣＰＵ１からのアクセスは発生しない。従って、実在しない仮想的な周辺デバイスの制御レジスタのアドレスが、実際に存在する周辺デバイス３のアドレスと重なっていた場合、バス信号制御部１８は、ＣＰＵ１からの信号を周辺デバイス３へ通知しない。そのため、周辺デバイス３がＣＰＵ１に応答することはない。
【０１２３】
なお、本実施の形態３において、アクセス監視部３１がアクセス監視部の一例に相当し、バス信号制御部１８がバス信号制御部の一例に相当する。
【０１２４】
本実施の形態３では、上記の構成により、仮想的な周辺デバイスの制御レジスタと、実在する周辺デバイス３の制御レジスタとのアドレスが同一であっても、周辺デバイスのエミュレーションが可能である。
【０１２５】
なお、本実施の形態３において、デバイスエミュレーション支援装置５が、実施の形態２の割り込み抑制部１７を更に備える構成であってもよい。
【０１２６】
（実施の形態４）
図１２は、本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、第１のＣＰＵ１Ａ、第２のＣＰＵ１Ｂ、メモリ２、周辺デバイス３、バス４及びデバイスエミュレーション支援装置５を備えている。なお、メモリ２と周辺デバイス３とバス４とは、図１の構成要素と同じ機能を有している。
【０１２７】
本実施の形態４の情報処理装置は、２つのＣＰＵを備えており、デバイスエミュレーション支援装置５は、特定のＣＰＵ、例えば第１のＣＰＵ１Ａにのみ例外を発生させる。
【０１２８】
本実施の形態４のデバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、リードデータ設定部１５、アクセス完了部１６及び特定ＣＰＵ例外発生部１９を備えている。監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、リードデータ設定部１５及びアクセス完了部１６は、実施の形態１の構成要素と同じ機能を有している。本実施の形態４のデバイスエミュレーション支援装置５は、実施の形態１の例外発生部１４の代わりに特定ＣＰＵ例外発生部１９を備える。以下、新規の構成要素である特定ＣＰＵ例外発生部１９を中心に説明する。
【０１２９】
特定ＣＰＵ例外発生部１９は、バス４とは異なる別の回路を介して、特定のＣＰＵである第１のＣＰＵ１Ａと直接接続しており、信号を発生することで例外を通知する機能を有している。特定ＣＰＵ例外発生部１９は、アクセス判断部１３によって今回のアクセス内容が前回のアクセス内容と異なると判断された場合に、アクセス判断部１３から例外発生要求を受け取り、第１のＣＰＵ１Ａに例外を発生させる。具体的には、特定ＣＰＵ例外発生部１９は、第１のＣＰＵ１Ａの例外に関係する端子に直接接続し、例外を発生させるための例外通知を第１のＣＰＵ１Ａに出力する。第１のＣＰＵ１Ａは、この例外を契機に、エミュレーションプログラムを動作させることができる。特定ＣＰＵ例外発生部１９は、複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ例外通知を送信する。
【０１３０】
なお、本実施の形態４において、特定ＣＰＵ例外発生部１９が例外発生部の一例に相当する。
【０１３１】
図１３は、本実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の一例を示す図である。
【０１３２】
図１３では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとし、デバイスドライバ２０と、ＯＳ２１と、アプリケーション２２とが、ゲストプログラム２５であるとする。また、例外の発生する第１のＣＰＵ１Ａは、ゲストプログラム２５と、例外制御部２７を備えた仮想化層２６とを実行する。一方、第２のＣＰＵ１Ｂは、エミュレーションプログラム２４を実行する。
【０１３３】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５は、第１のＣＰＵ１Ａに例外通知を出力して、第１のＣＰＵ１Ａに例外を発生させる。第１のＣＰＵ１Ａは、例外通知を受け取ると、仮想化層２６の例外制御部２７に対して例外処理の実行を指示する。仮想化層２６は、第１のＣＰＵ１Ａからの例外処理の実行指示を受けて、例外制御部２７を最初に動作させる。
【０１３４】
例外制御部２７は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断する。デバイスエミュレーション支援装置５によって発生した例外の場合、第１のＣＰＵ１Ａは、一般的なＣＰＵ間の通信機能などを用いて第２のＣＰＵ１Ｂ上のエミュレーションプログラム２４に通知する。第２のＣＰＵ１Ｂは、周辺デバイスのエミュレーション処理を実行する。デバイスエミュレーション支援装置５によって発生した例外でない場合、ＯＳ２１内の例外ハンドラ２３へ制御を移す。これにより、ゲストプログラム２５内のデバイスドライバ２０が周辺デバイスにアクセスした時に、エミュレーションプログラム２４が動作する。
【０１３５】
なお、図１３では、仮想化層２６が、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させているが、ＯＳ２１が、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させてもよい。
【０１３６】
また、エミュレーションプログラム２４を２つに分割し、第１のＣＰＵ１Ａは、制御レジスタへのデータのリード及びデータのライトに関するエミュレーション処理部分を実行してもよい。この場合、第１のＣＰＵ１Ａは、図４又は図５のような構成となる。第２のＣＰＵ１Ｂは、ＤＭＡによるデータ転送処理、エンコード処理及びデコード処理等の、第１のＣＰＵ１Ａと並列に動作する周辺デバイスのデータ処理部分を実行する。
【０１３７】
図１４は、本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の変形例を示す図である。
【０１３８】
図１４において、第１のＣＰＵ１Ａは、エミュレーションプログラム２４と、例外制御部２７を備えた仮想化層２６とを実行する。一方、第２のＣＰＵ１Ｂは、デバイスドライバ２０、ＯＳ２１及びアプリケーション２２を備えたゲストプログラム２５を実行する。
【０１３９】
図１４では、ゲストプログラム２５は、デバイスエミュレーション支援装置５からの例外通知が入力されない第２のＣＰＵ１Ｂで実行される。デバイスエミュレーション支援装置５からの例外発生時は、第１のＣＰＵ１Ａでエミュレーションプログラム２４が実行される。
【０１４０】
なお、図１４では、仮想化層２６が、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させているが、第１のＣＰＵ１ＡでもＯＳを備える構成とし、第１のＣＰＵ１ＡのＯＳが、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させてもよい。また、第１のＣＰＵ１ＡのＯＳの例外ハンドラに直接エミュレーションプログラム２４を実装してもよい。
【０１４１】
以上、本実施の形態４によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析、及びレジスタをインクリメント又はデクリメントするなどの命令の実行に関連する整合性の維持などの仮想的な制御レジスタへのアクセスに関する処理を行なう必要がなく、周辺デバイスのエミュレーションを行うことができる。これにより、エミュレーションにおける処理量を削減することが可能となり、周辺デバイスのエミュレーションの効率を向上することができる。
【０１４２】
なお、実施の形態１、実施の形態２及び実施の形態３では、ＣＰＵ１が単独である場合を示したがこれに限るものではない。ＯＳ等の制御で複数のＣＰＵを用いて処理を行なう情報処理装置にも、本実施の形態１、実施の形態２及び実施の形態３のデバイスエミュレーション支援装置を用いることができる。また、実施の形態４でも、第１のＣＰＵ１Ａ又は第２のＣＰＵ１Ｂはそれぞれ複数のＣＰＵで構成されてもよい。
【０１４３】
また、本実施の形態１〜４のデバイスエミュレーション支援装置は、集積回路であるＬＳＩとして実現できるが、これらは個別に１チップ化されてもよいし、一部又は全てを含むように１チップ化されてもよい。ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ又はウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  ＰｒｏｇｒａｍｍａｂｌｅＧａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
【０１４４】
（実施の形態５）
図１５は、本発明の実施の形態５におけるデバイスエミュレーション支援回路を備えた情報処理装置の構成を示す図である。図１５に示す情報処理装置は、ＣＰＵ１、メモリ２、周辺デバイス３及びデバイスエミュレーション支援回路５１を備えている。
【０１４５】
デバイスエミュレーション支援回路５１は、集積回路である。デバイスエミュレーション支援回路５１は、監視アドレス設定回路１１０、アクセス監視回路１１１、アクセス記憶回路１１２、アクセス判断回路１１３、例外発生回路１１４、リードデータ設定回路１１５及びアクセス完了回路１１６を備えている。なお、図１５に示す実施の形態５の情報処理装置において、実施の形態１と同じ構成については、同じ符号を付し、説明を省略する。
【０１４６】
実施の形態５における監視アドレス設定回路１１０、アクセス監視回路１１１、アクセス記憶回路１１２、アクセス判断回路１１３、例外発生回路１１４、リードデータ設定回路１１５及びアクセス完了回路１１６は、それぞれ、実施の形態１における監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６と同じ機能を有している。
【０１４７】
なお、本実施の形態５において、監視アドレス設定回路１１０が監視アドレス記憶回路の一例に相当し、アクセス監視回路１１１がアクセス監視回路の一例に相当し、アクセス記憶回路１１２がアクセス記憶回路の一例に相当し、リードデータ設定回路１１５がリードデータ記憶回路の一例に相当し、例外発生回路１１４が例外発生回路の一例に相当し、アクセス判断回路１１３がアクセス判断回路の一例に相当し、アクセス完了回路１１６がアクセス完了回路の一例に相当する。
【０１４８】
このように、監視アドレス設定回路１１０、アクセス監視回路１１１、アクセス記憶回路１１２、アクセス判断回路１１３、例外発生回路１１４、リードデータ設定回路１１５及びアクセス完了回路１１６は、１つの集積回路に搭載することができる。
【０１４９】
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。
【０１５０】
本発明の一局面に係るデバイスエミュレーション支援装置は、バスを介してＣＰＵと通信可能に接続されたデバイスエミュレーション支援装置であって、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶部と、前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である前記周辺装置に対応するアドレスを含むアクセス情報を有し、前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視部と、前記アクセス監視部によって取得されたアクセス情報を記憶するアクセス記憶部と、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶部と、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生部と、前記アクセス監視部によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記例外発生部に例外の発生を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断部と、前記アクセス監視部によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記アクセスを完了し、前記アクセス監視部によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記アクセスを完了するアクセス完了部とを備える。
【０１５１】
本発明の他の局面に係るデバイスエミュレーション支援方法は、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として監視アドレス記憶部に記憶する監視アドレス記憶ステップと、ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視ステップと、前記アクセス監視ステップにおいて取得されたアクセス情報をアクセス記憶部に記憶するアクセス記憶ステップと、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータをリードデータ記憶部に一時的に記憶するリードデータ記憶ステップと、前記アクセス監視ステップにおいて取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較するアクセス判断ステップと、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生ステップと、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外する除外ステップと、前記アクセス監視ステップにおいて監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視ステップにおいて監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了ステップとを含む。
【０１５２】
本発明の他の局面に係るデバイスエミュレーション支援回路は、例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援回路であって、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶回路と、前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶回路に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視回路と、前記アクセス監視回路によって取得されたアクセス情報を記憶するアクセス記憶回路と、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶回路と、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生回路と、前記アクセス監視回路によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶回路に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶回路に記憶するとともに、前記例外発生回路に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶回路に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断回路と、前記アクセス監視回路によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶回路に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視回路によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了回路とを備える。
【０１５３】
本発明の他の局面に係る情報処理装置は、ＣＰＵと、前記ＣＰＵによって制御される周辺装置と、前記ＣＰＵから出力されたアクセス信号を前記周辺装置に伝達するバスと、上記のいずれかに記載のデバイスエミュレーション支援装置とを備える。
【０１５４】
これらの構成によれば、監視アドレス記憶部には、エミュレーション対象の周辺装置に対応するアドレスが監視の対象として記憶される。ＣＰＵから周辺装置へのアクセスが監視され、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつＣＰＵから周辺装置に向けて出力されるアクセス信号から、監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報が取得される。アクセス記憶部には、取得されたアクセス情報が記憶される。また、リードデータ記憶部には、アクセスがデータの読み出しを表す読み出しアクセスである場合に、周辺装置から読み出されるデータが一時的に記憶される。取得されたアクセス情報を受け取り、受け取ったアクセス情報と、アクセス記憶部に記憶されている直前のアクセス情報とが比較される。受け取ったアクセス情報が直前のアクセス情報と異なる場合、取得したアクセス情報がアクセス記憶部に記憶されるとともに、ＣＰＵに例外を発生させるための例外発生通知がＣＰＵへ送信される。一方、受け取ったアクセス情報が直前のアクセス情報と同一の場合、アクセス記憶部に記憶されている直前のアクセス情報が比較の対象から除外される。監視されるアクセスが読み出しアクセスである場合、リードデータ記憶部に記憶されているデータがＣＰＵに出力されて読み出しアクセスを完了するようＣＰＵに指示される。また、監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、書き込みアクセスを完了するようＣＰＵに指示される。
【０１５５】
すなわち、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と異なる場合、ＣＰＵに例外を発生させることによりエミュレーション処理を実行させる。一方、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と同一の場合、例外の終了に伴うアクセスの再実行と見なし、アクセスが読み出しアクセスである場合、所定のデータをＣＰＵに出力した後、読み出しアクセスを完了するようＣＰＵに指示し、アクセスが書き込みアクセスである場合、そのまま書き込みアクセスを完了するようＣＰＵに指示する。
【０１５６】
したがって、エミュレーションを行うＣＰＵによって、トラップしたアクセスの内容を解析して必要なデータを取得する処理が行われないので、エミュレーションする際の処理量を削減することができ、効率的に周辺装置のエミュレーションを行うことができる。
【０１５７】
また、上記のデバイスエミュレーション支援装置において、前記アクセス記憶部が前記アクセス判断部において比較の対象となる前記直前のアクセス情報を記憶している間、前記ＣＰＵへの割り込みを抑制する割り込み抑制部をさらに備えることが好ましい。
【０１５８】
この構成によれば、比較の対象となる直前のアクセス情報がアクセス記憶部に記憶されている間、ＣＰＵへの割り込みが抑制される。
【０１５９】
すなわち、エミュレーションの途中で、アクセス記憶部に記憶されている直前のアクセス情報と同じアクセス情報を有するアクセスが割り込み処理として実行された場合、例外の終了に伴うアクセスの再実行と見なされてしまう。
【０１６０】
そこで、比較の対象となる直前のアクセス情報がアクセス記憶部に記憶されている間、ＣＰＵへの割り込みが抑制されるので、割り込みにより制御される周辺装置をエミュレーション対象の周辺装置とすることができる。
【０１６１】
また、上記のデバイスエミュレーション支援装置において、前記ＣＰＵから前記周辺装置に向けて出力される前記アクセス信号を受信し、受信した前記アクセス信号を前記周辺装置に出力するか否かを判断するバス信号制御部をさらに備え、前記アクセス監視部は、前記監視アドレス記憶部に記憶されているアドレスに合致しないアドレスを含むアクセス情報を、前記バス信号制御部に通知し、前記バス信号制御部は、前記アクセス監視部から前記アクセス情報が通知された場合、当該アクセス情報を有する前記アクセス信号を前記周辺装置に出力することが好ましい。
【０１６２】
この構成によれば、バス信号制御部は、ＣＰＵから周辺装置に向けて出力されるアクセス信号を受信する。そして、監視アドレス記憶部に記憶されているアドレスに合致しないアドレスを含むアクセス情報が、バス信号制御部に通知される。バス信号制御部は、アクセス情報が通知された場合、当該アクセス情報を有するアクセス信号を周辺装置に出力する。
【０１６３】
したがって、ＣＰＵからエミュレーション対象でない周辺装置へ送られるアクセス信号のみが周辺装置へ出力されるので、エミュレーション対象である周辺装置のアドレスと、実在する周辺装置のアドレスとが同じ場合であっても、確実にエミュレーションを行うとともに、実在する周辺装置を制御することができる。
【０１６４】
また、上記のデバイスエミュレーション支援装置において、前記ＣＰＵは、複数のＣＰＵを含み、前記例外発生部は、前記複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ前記例外発生通知を送信することが好ましい。
【０１６５】
この構成によれば、複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ例外発生通知が送信されるので、特定のＣＰＵにおいて、例外を発生させることによりエミュレーションを行わせると同時に、他のＣＰＵにおいて、他のプログラムを実行させることができる。
【０１６６】
また、上記のデバイスエミュレーション支援装置において、前記アクセス情報は、アクセス対象である前記周辺装置に対応するアドレスと、前記アクセスが前記読み出しアクセス及び前記書き込みアクセスのいずれであるかを表すアクセス種別と、前記アクセス種別が前記書き込みアクセスである場合に前記周辺装置に書き込まれる値とを少なくとも含むことが好ましい。
【０１６７】
この構成によれば、アクセス情報に含まれるアドレスを用いて、ＣＰＵからエミュレーション対象である周辺装置へのアクセスを特定することができ、アクセス情報に含まれるアクセス種別を用いて、アクセスが読み出しアクセス及び書き込みアクセスのいずれであるかを特定することができる。また、アクセス情報に含まれる値を用いて、アクセス種別が書き込みアクセスである場合に周辺装置に当該値を書き込むことができる。
【０１６８】
また、上記のデバイスエミュレーション支援装置において、前記ＣＰＵは、前記例外発生部によって出力された前記例外発生通知を受信した場合、例外を発生することによりエミュレーション処理を実行し、その後、前記周辺装置に出力された前記アクセス信号と同じアクセス信号を再び前記周辺装置へ出力することが好ましい。
【０１６９】
この構成によれば、ＣＰＵによって、例外発生通知が受信された場合、例外を発生することによりエミュレーション処理が実行され、その後、周辺装置に出力されたアクセス信号と同じアクセス信号が再び周辺装置へ出力される。
【０１７０】
したがって、最初のアクセス信号が出力されることにより、エミュレーション処理が実行され、最初のアクセス信号と同じアクセス信号が再び出力されることにより、読み出しアクセスに対応するデータがＣＰＵに送られ、アクセスが完了されるので、ＣＰＵが周辺装置にアクセスすることなく、エミュレーション処理を行うことができる。
【０１７１】
なお、発明を実施するための形態の項においてなされた具体的な実施態様または実施例は、あくまでも、本発明の技術内容を明らかにするものであって、そのような具体例にのみ限定して狭義に解釈されるべきものではなく、本発明の精神と次に記載する特許請求事項との範囲内で、種々変更して実施することができるものである。
【産業上の利用可能性】
【０１７２】
本発明に係るデバイスエミュレーション支援装置、デバイスエミュレーション支援方法、デバイスエミュレーション支援回路及び情報処理装置は、例えば、大型計算機又はパーソナルコンピュータのような形態のみならず、各種の家電機器、携帯電話のような通信機器、産業機器又は乗用機器などにも利用可能である。
【図１】
2009144892.tif 000003
【図２】
2009144892.tif 000004
【図３】
2009144892.tif 000005
【図４】
2009144892.tif 000006
【図５】
2009144892.tif 000007
【図６】
2009144892.tif 000008
【図７】
2009144892.tif 000009
【図８】
2009144892.tif 000010
【図９】
2009144892.tif 000011
【図１０】
2009144892.tif 000012
【図１１】
2009144892.tif 000013
【図１２】
2009144892.tif 000014
【図１３】
2009144892.tif 000015
【図１４】
2009144892.tif 000016
【図１５】
2009144892.tif 000017
【手続補正書】
【提出日】平成22年1月21日(2010.1.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援装置であって、
エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶部と、
前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視部と、
前記アクセス監視部によって取得されたアクセス情報を記憶するアクセス記憶部と、
前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶部と、
前記ＣＰＵに例外を発生させるための前記例外発生通知を前記ＣＰＵへ送信する例外発生部と、
前記アクセス監視部によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記例外発生部に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断部と、
前記アクセス監視部によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視部によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了部とを備えることを特徴とするデバイスエミュレーション支援装置。
【請求項２】
前記アクセス記憶部が前記アクセス判断部において比較の対象となる前記直前のアクセス情報を記憶している間、前記ＣＰＵへの割り込みを抑制する割り込み抑制部をさらに備えることを特徴とする請求項１記載のデバイスエミュレーション支援装置。
【請求項３】
前記ＣＰＵから前記周辺装置に向けて出力される前記アクセス信号を受信し、受信した前記アクセス信号を前記周辺装置に出力するか否かを判断するバス信号制御部をさらに備え、
前記アクセス監視部は、前記監視アドレス記憶部に記憶されているアドレスに合致しないアドレスを含むアクセス情報を、前記バス信号制御部に通知し、
前記バス信号制御部は、前記アクセス監視部から前記アクセス情報が通知された場合、当該アクセス情報を有する前記アクセス信号を前記周辺装置に出力することを特徴とする請求項１又は２記載のデバイスエミュレーション支援装置。
【請求項４】
前記ＣＰＵは、複数のＣＰＵを含み、
前記例外発生部は、前記複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ前記例外発生通知を送信することを特徴とする請求項１〜３のいずれかに記載のデバイスエミュレーション支援装置。
【請求項５】
前記アクセス情報は、アクセス対象である前記周辺装置に対応するアドレスと、前記アクセスが前記読み出しアクセス及び前記書き込みアクセスのいずれであるかを表すアクセス種別と、前記アクセス種別が前記書き込みアクセスである場合に前記周辺装置に書き込まれる値とを少なくとも含むことを特徴とする請求項１〜４のいずれかに記載のデバイスエミュレーション支援装置。
【請求項６】
前記ＣＰＵは、前記例外発生部によって出力された前記例外発生通知を受信した場合、例外を発生することによりエミュレーション処理を実行し、その後、前記周辺装置に出力された前記アクセス信号と同じアクセス信号を再び前記周辺装置へ出力することを特徴とする請求項１〜５のいずれかに記載のデバイスエミュレーション支援装置。
【請求項７】
エミュレーション対象の周辺装置に対応するアドレスを監視の対象として監視アドレス記憶部に記憶する監視アドレス記憶ステップと、
ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視ステップと、
前記アクセス監視ステップにおいて取得されたアクセス情報をアクセス記憶部に記憶するアクセス記憶ステップと、
前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータをリードデータ記憶部に一時的に記憶するリードデータ記憶ステップと、
前記アクセス監視ステップにおいて取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較するアクセス判断ステップと、
受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生ステップと、
受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外する除外ステップと、
前記アクセス監視ステップにおいて監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視ステップにおいて監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了ステップとを含むことを特徴とするデバイスエミュレーション支援方法。
【請求項８】
例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援回路であって、
エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶回路と、
前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶回路に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視回路と、
前記アクセス監視回路によって取得されたアクセス情報を記憶するアクセス記憶回路と、
前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶回路と、
前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生回路と、
前記アクセス監視回路によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶回路に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶回路に記憶するとともに、前記例外発生回路に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶回路に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断回路と、
前記アクセス監視回路によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶回路に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視回路によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了回路とを備えることを特徴とするデバイスエミュレーション支援回路。
【請求項９】
ＣＰＵと、
前記ＣＰＵによって制御される周辺装置と、
前記ＣＰＵから出力された前記アクセス信号を前記周辺装置に伝達するバスと、
請求項１〜６のいずれかに記載のデバイスエミュレーション支援装置とを備えることを特徴とする情報処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアが実行中に利用する周辺装置のエミュレーションを容易にするデバイスエミュレーション支援装置、デバイスエミュレーション支援方法及びデバイスエミュレーション支援回路、並びに当該デバイスエミュレーション支援装置を備える情報処理装置に関するものである。
【背景技術】
【０００２】
情報処理装置で実行されるプログラムは、情報処理装置が備える１つ以上のデバイス（周辺装置）を利用しながら動作する。そのため、特定の情報処理装置を前提に作成されたプログラムは、処理対象のデバイスが存在しない場合、あるいは、処理対象のデバイスと同種のデバイスが存在しても制御の方法や仕様が異なる場合、正常に動作しない。このような場合、処理対象のデバイスのエミュレーションをプログラムの変更なしに行うことができれば、特定の情報処理装置とは別の情報処理装置でそのプログラムを利用することが可能となる。
【０００３】
一般に、中央演算装置（ＣＰＵ）のアドレス空間にデバイスの制御レジスタが配置され、ＣＰＵが制御レジスタを操作することで、対象のデバイスは動作する。つまり、ＣＰＵは、対象デバイスの制御レジスタのアドレスに対し、書き込み（ライト）、または、読み出し（リード）を行う。従って、ソフトウェアでデバイスのエミュレーションを行うには、特定のアドレス、つまり、エミュレーション対象デバイスの制御レジスタのアドレスに対する、ＣＰＵからのアクセスを捕らえる（トラップする）必要がある。エミュレーション対象デバイスとは、ソフトウェアが処理対象としているが実際には存在していないデバイスである。
【０００４】
特定アドレスへのアクセスをトラップする一般的な方法としては、メモリ空間の保護機能を用いるものがある。すなわち、トラップするアドレスへのリードとライトとを禁止することで、そのアドレスへのアクセス時に例外が発生する。例外ハンドラを契機にしてエミュレーションを開始し、エミュレーション終了後に元のプログラムに復帰することで、当該プログラムを変更することなしにデバイスのエミュレーションが可能となる。
【０００５】
また、バスを流れる信号を監視することで、ＣＰＵから特定のアドレス空間へのアクセスを検知するバス監視装置がある（例えば、特許文献１参照）。バス監視装置は、バスを流れる各種信号を監視し、設定された条件に一致した信号が検知された場合、ＣＰＵに割り込みを発生させる。これにより、ＣＰＵからの特定のアドレスへのアクセスをトラップすることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１１３９０６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
エミュレーションの対象であるデバイスが行う処理を、ソフトウェアがデバイスの代わりに行うことにより、デバイスのエミュレーションが行われる。ソフトウェアが代わりに処理を行うために、対象デバイスの制御レジスタに対するアクセスをトラップした後、当該アクセスがどのようなアクセスであるか、すなわちアクセスの内容を取得する必要がある。例えば、エミュレーション対象であるデバイスがＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）であり、デバイスが行う処理がメモリコピーである場合、エミュレーションを行うソフトウェアは、コピー対象のデータが格納されているメモリ上のアドレスなど、処理に必要となる情報を取得する。以下、エミュレーションの対象であるデバイスの制御レジスタを“仮想的なレジスタ”と表す。
【０００８】
仮想的なレジスタへのアクセスがデータのライトである場合、エミュレーションを行うソフトウェアは、トラップした命令（書き込み命令）の内容を解析し、書き込むデータを保持している演算レジスタを特定する。また、エミュレーションを行うソフトウェアは、特定した演算レジスタからデータを取得し、取得したデータを対象のアドレスに書き込む処理を行う。
【０００９】
仮想的なレジスタへのアクセスがデータのリードである場合、エミュレーションを行うソフトウェアは、トラップした命令（読み出し命令）の内容を解析し、読み出したデータの保存先（演算レジスタ及びメモリなど）を特定する。また、エミュレーションを行うソフトウェアは、読み出したデータを保存先に格納する処理を行う。
【００１０】
しかしながら、従来の技術では、制御レジスタに対するアクセスをトラップする毎に、エミュレーションを行うソフトウェアが、トラップしたアクセスの内容を解析して必要なデータを取得するため、複数の命令を実行することになり、処理量が増加するという課題を有していた。
【００１１】
本発明は、上記の課題を解決するためになされたもので、エミュレーションする際の処理量を削減することができ、効率的に周辺装置のエミュレーションを行うことができるデバイスエミュレーション支援装置、デバイスエミュレーション支援方法、デバイスエミュレーション支援回路及び情報処理装置を提供することを目的とするものである。
【課題を解決するための手段】
【００１２】
本発明の一局面に係るデバイスエミュレーション支援装置は、例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援装置であって、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶部と、前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視部と、前記アクセス監視部によって取得されたアクセス情報を記憶するアクセス記憶部と、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶部と、前記ＣＰＵに例外を発生させるための前記例外発生通知を前記ＣＰＵへ送信する例外発生部と、前記アクセス監視部によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記例外発生部に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断部と、前記アクセス監視部によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視部によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了部とを備える。
【００１３】
この構成によれば、監視アドレス記憶部には、エミュレーション対象の周辺装置に対応するアドレスが監視の対象として記憶される。ＣＰＵから周辺装置へのアクセスが監視され、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつＣＰＵから周辺装置に向けて出力されるアクセス信号から、監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報が取得される。アクセス記憶部には、取得されたアクセス情報が記憶される。また、リードデータ記憶部には、アクセスがデータの読み出しを表す読み出しアクセスである場合に、周辺装置から読み出されるデータが一時的に記憶される。取得されたアクセス情報を受け取り、受け取ったアクセス情報と、アクセス記憶部に記憶されている直前のアクセス情報とが比較される。受け取ったアクセス情報が直前のアクセス情報と異なる場合、取得したアクセス情報がアクセス記憶部に記憶されるとともに、ＣＰＵに例外を発生させるための例外発生通知がＣＰＵへ送信される。一方、受け取ったアクセス情報が直前のアクセス情報と同一の場合、アクセス記憶部に記憶されている直前のアクセス情報が比較の対象から除外される。監視されるアクセスが読み出しアクセスである場合、リードデータ記憶部に記憶されているデータがＣＰＵに出力されて読み出しアクセスを完了するようＣＰＵに指示される。また、監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、書き込みアクセスを完了するようＣＰＵに指示される。
【００１４】
すなわち、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と異なる場合、ＣＰＵに例外を発生させることによりエミュレーション処理を実行させる。一方、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と同一の場合、例外の終了に伴うアクセスの再実行と見なし、アクセスが読み出しアクセスである場合、所定のデータをＣＰＵに出力した後、読み出しアクセスを完了するようＣＰＵに指示し、アクセスが書き込みアクセスである場合、そのまま書き込みアクセスを完了するようＣＰＵに指示する。
【発明の効果】
【００１５】
本発明によれば、エミュレーションを行うＣＰＵによって、トラップしたアクセスの内容を解析して必要なデータを取得する処理が行われないので、エミュレーションする際の処理量を削減することができ、効率的に周辺装置のエミュレーションを行うことができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図２】本発明の実施の形態１におけるデバイスエミュレーション支援装置の動作を説明するためのフローチャートである。
【図３】本発明の実施の形態１におけるデバイスエミュレーション装置で用いるレジスタの構成の一例を示す図である。
【図４】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の一例を示す図である。
【図５】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の第１の変形例を示す図である。
【図６】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の第２の変形例を示す図である。
【図７】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のリードアクセス時のエミュレーション処理の一例を示すフローチャートである。
【図８】本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のライトアクセス時のエミュレーション処理の一例を示すフローチャートである。
【図９】本発明の実施の形態２におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図１０】本発明の実施の形態２における、割り込み抑制部と割り込みコントローラとの接続例を示す図である。
【図１１】本発明の実施の形態３におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図１２】本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。
【図１３】本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の一例を示す図である。
【図１４】本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の変形例を示す図である。
【図１５】本発明の実施の形態５におけるデバイスエミュレーション支援回路を備えた情報処理装置の構成を示す図である。
【発明を実施するための形態】
【００１７】
以下本発明の実施の形態について、図面を参照しながら説明する。尚、以下の実施の形態は、本発明を具体化した一例であって、本発明の技術的範囲を限定する性格のものではない。
【００１８】
（実施の形態１）
図１は、本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、ＣＰＵ（中央演算装置）１、メモリ２、周辺デバイス（周辺装置）３、バス４及びデバイスエミュレーション支援装置５を備えている。
【００１９】
ＣＰＵ１は、メモリ２に格納されているプログラムを実行することで、情報処理装置を制御する。また、ＣＰＵ１のアドレス空間は、周辺デバイス３の制御に必要なレジスタ（制御レジスタ）を含む。周辺デバイス３を制御する際、ＣＰＵ１で実行されるプログラムが、対象の周辺デバイス３に対応する制御レジスタのアドレスに対し、データをリード又はライトすることで、対象の周辺デバイス３を制御することができる。
【００２０】
メモリ２は、情報処理装置の実行する各種のプログラム及びデータを格納する記憶装置である。メモリ２は、ランダムアクセスメモリ（ＲＡＭ）またはフラッシュメモリなど任意の種類のメモリを使用することができる。また、メモリ２は、同種または異種のメモリを複数組み合わせたものであってもよい。さらに、メモリ２は、リードオンメモリ（ＲＯＭ）を含んでもよい。
【００２１】
周辺デバイス３は、各種の入出力装置などのデバイスであり、情報処理装置の使用目的に応じたものが利用される。ここでは、周辺デバイスＡと周辺デバイスＢと周辺デバイスＣとの３つの周辺デバイスを備えている一例を示している。
【００２２】
バス４は、ＣＰＵ１とメモリ２と周辺デバイス３とデバイスエミュレーション支援装置５とを互いに通信可能に接続しており、データをやり取りする伝送路である。つまり、ＣＰＵ１から周辺デバイス３へのアクセスは、バス４を介して行われる。
【００２３】
デバイスエミュレーション支援装置５は、ゲストプログラムを実行するＣＰＵ１のアドレス空間へのアクセスを監視し、ＣＰＵ１に対する例外処理を発生させる。これにより、デバイスエミュレーション支援装置５は、エミュレーションを行うプログラム（以下エミュレーションプログラムと呼ぶ）に特定のアドレスへのアクセスを通知し、エミュレーションプログラムの実行を支援する。
【００２４】
なお、ゲストプログラムとは、プログラム上では存在を前提としているが、情報処理装置が備えていない周辺デバイスの一部または全てを制御するためのプログラムである。ゲストプログラムは、情報処理装置が備える周辺デバイスを制御するためのプログラムと、情報処理装置が備えていない周辺デバイスを制御するためのプログラムとを含む。なお、ゲストプログラムは、情報処理装置が備えていない周辺デバイスを制御するためのプログラムのみであってもよい。
【００２５】
ゲストプログラムとエミュレーションプログラムとは、メモリ２に格納されており、ＣＰＵ１で実行される。ゲストプログラムをＣＰＵ１で実行する場合、存在しない周辺デバイスの制御レジスタへのアクセスをトラップし、対象のエミュレーションプログラムを実行する。これにより、存在しない周辺デバイスをソフトウェア的にエミュレーションすることができる。
【００２６】
デバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６を備えている。
【００２７】
監視アドレス設定部１０は、デバイスエミュレーション支援装置５が監視の対象とするアドレス範囲を保持する記憶部である。デバイスエミュレーション支援装置５は、監視アドレス設定部１０に設定されたアドレス範囲へのアクセスをトラップする。つまり、監視アドレス設定部１０は、エミュレーション対象の周辺デバイスに対応するアドレス範囲を保持している。より具体的には、監視アドレス設定部１０は、通常の周辺デバイス３の制御レジスタと同様に、トラップ対象のアドレスの範囲を設定する制御レジスタである。
【００２８】
監視アドレス設定部１０に設定されるアドレス範囲としては、例えば、アドレスの上限と下限とを示す値が用いられる。また、監視アドレス設定部１０に設定されるアドレス範囲として、開始アドレスと範囲の大きさとを示す値を用いてもよい。また、監視アドレス設定部１０へのアドレス範囲の設定は、例えば、エミュレーションプログラムの初期化時に行われる。更に、トラップ対象のアクセスをより詳細に指定するために、監視アドレス設定部１０は、アドレス範囲以外の条件をさらに設定してもよい。例えば、監視アドレス設定部１０は、リード命令、ライト命令、またはその両方をトラップの対象にするなどの設定が可能である。
【００２９】
アクセス監視部１１は、バス４上に流れる信号（アクセス信号）を監視し、監視アドレス設定部１０に設定されているアドレス範囲を含む条件に合致するアクセスの発生を検知する。この信号には、アクセス対象のアドレス、アクセスがリードであるかライトであるかを表す種別、及び、リードするデータまたはライトするデータのデータサイズなどのアクセス内容に関する情報（アクセス情報）が含まれている。そのため、アクセス監視部１１は、バス４上に流れる信号を監視することで、ＣＰＵ１による、アドレス空間へのアクセスのアクセス内容を検知することができる。また、アクセス監視部１１は、検知した条件に合致するアクセス内容を、アクセス判断部１３に通知する。
【００３０】
アクセス記憶部１２は、アクセス監視部１１によって検知された、監視アドレス設定部１０に設定されている条件に合致するアクセス内容を保持する。アクセス判断部１３は、アクセス監視部１１から通知されたアクセス内容を判断し、アクセス記憶部１２への格納処理を行う。アクセス記憶部１２には、常に監視アドレス設定部１０に設定されている条件に合致する直前のアクセス内容が保持される。
【００３１】
アクセス記憶部１２に記憶されるアクセス内容は、少なくとも、アクセス先のアドレスと、アクセスがリードであるかライトであるかを表す種別と、アクセスがライトの場合はライトする値（データ）とを含んでいる。また、アクセス記憶部１２に記憶されるアクセス内容は、例えば、リードまたはライトするデータのサイズを示す情報を含んでもよい。さらに、ＣＰＵ１からアクセス記憶部１２に保持されている直前のアクセス内容を参照可能にするために、ＣＰＵ１のアドレス空間は、直前のアクセス内容を取得できるレジスタを有する。エミュレーションプログラムを実行するＣＰＵ１は、このアクセス内容を参照し、周辺デバイスのエミュレーションを行う。
【００３２】
アクセス判断部１３は、アクセス監視部１１によって検知された、監視アドレス設定部１０に設定されている条件に合致するアクセス内容を受け取り、受け取ったアクセス内容が、アクセス記憶部１２に記憶している直前のアクセス内容（前回トラップされたアクセス内容）と同じか否かを判断する。デバイスエミュレーション支援装置５は、ＣＰＵ１での例外の発生により、ＣＰＵ１にエミュレーションプログラムを実行させる。そして、例外処理終了後に、ＣＰＵ１は、エミュレーション対象周辺デバイスへのアクセスを発生させた命令に復帰し、その命令を再実行する。つまり、アクセス判断部１３は、取得したアクセス内容が直前のアクセス内容と異なる場合に、命令を再実行させると判断する。
【００３３】
命令を再実行させると判断した場合、アクセス判断部１３は、アクセス記憶部１２に新しいアクセス内容を格納し、例外発生部１４に例外の発生を要求する。一方、命令を再実行させない、すなわち今回受け取ったアクセス内容が、直前のアクセス内容と同一であると判断した場合、アクセス判断部１３は、アクセス記憶部１２に記憶されている直前のアクセス内容を消去し、アクセス完了部１６にアクセス内容を通知する。これにより、以後は、受け取ったアクセス内容が、記憶されている直前のアクセス内容と同じであっても、当該受け取ったアクセス内容は新たなアクセスと判断されるようになる。
【００３４】
すなわち、アクセス判断部１３は、アクセス監視部１１によって取得されたアクセス内容を受け取り、受け取ったアクセス内容と、アクセス記憶部１２に記憶されている直前のアクセス内容とを比較する。受け取ったアクセス内容が直前のアクセス内容と異なる場合、アクセス判断部１３は、取得したアクセス内容をアクセス記憶部１２に記憶するとともに、例外発生部１４に例外発生通知の送信を要求する。一方、受け取ったアクセス内容が直前のアクセス内容と同一の場合、アクセス判断部１３は、アクセス記憶部１２に記憶されている直前のアクセス内容を比較の対象から除外する。
【００３５】
なお、本実施の形態１では、直前のアクセス内容を消去しているが、必ずしも記憶内容そのものを消去する必要はない。直前のアクセス内容の消去とは、アクセス判断部１３による比較の対象から外すことを意味する。
【００３６】
例外発生部１４は、アクセス判断部１３によって今回のアクセス内容が前回のアクセス内容と異なると判断された場合に、アクセス判断部１３から例外発生要求を受け取り、例外を発生させるための例外通知をＣＰＵ１に出力する。具体的には、例外発生部１４は、データアボートなどのＣＰＵ１に例外を発生させることができる特定の信号をバス４に出力する。また、ＣＰＵ１の例外発生に関係する端子に、例外発生部１４を直接接続し、例外発生部１４からＣＰＵ１に例外通知を出力する構成を用いてもよい。この例外を契機に、ＣＰＵ１は、エミュレーションプログラムを動作させる。
【００３７】
リードデータ設定部１５は、トラップしたアクセスがリード命令であった場合に、周辺デバイス３から読み出されるデータを一時的に保持する。リードデータ設定部１５へのデータの設定は、エミュレーションプログラム（ＣＰＵ１）が行う。ＣＰＵ１からデータの設定を可能とするために、ＣＰＵ１のアドレス空間は、データを設定するレジスタを有する。
【００３８】
アクセス完了部１６は、アクセス判断部１３によって今回のアクセス内容が直前のアクセス内容と同一である、つまり命令を再実行させないと判断された場合に、アクセス判断部１３から通知されるアクセス内容を受け取る。アクセス判断部１３から通知されたアクセス内容に含まれる種別がリードである時、つまりゲストプログラム（ＣＰＵ１）が、存在しない周辺デバイスの制御レジスタからデータをリードするリードアクセスが発生した時、アクセス完了部１６は、ＣＰＵ１のリードアクセスを完了させる。
【００３９】
すなわち、アクセス完了部１６は、アクセス監視部１１によって監視されるアクセスが読み出しアクセスである場合、リードデータ設定部１５に記憶されているデータをＣＰＵ１に出力して読み出しアクセスを完了するようＣＰＵ１に指示する。また、アクセス完了部１６は、アクセス監視部１１によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、書き込みアクセスを完了するようＣＰＵ１に指示する。
【００４０】
具体的には、アクセス完了部１６は、リードデータ設定部１５に保持されているデータを取得し、バス４に信号として出力する。つまり、アクセス完了部１６は、エミュレーションプログラムが設定したデータを、存在しない周辺デバイスの制御レジスタに対するリードアクセスの結果として、ゲストプログラムに受け取らせる。
【００４１】
一方、アクセス判断部１３から通知されたアクセス内容に含まれる種別がライトである時、つまりゲストプログラム（ＣＰＵ１）が、存在しない周辺デバイスの制御レジスタにデータをライトするライトアクセスが発生した時、アクセス完了部１６は、ＣＰＵ１のライトアクセスを完了させる。具体的には、アクセス完了部１６は、バス４にデータ受け取り完了の信号を出力する。
【００４２】
なお、本実施の形態１において、監視アドレス設定部１０が監視アドレス記憶部の一例に相当し、アクセス監視部１１がアクセス監視部の一例に相当し、アクセス記憶部１２がアクセス記憶部の一例に相当し、リードデータ設定部１５がリードデータ記憶部の一例に相当し、例外発生部１４が例外発生部の一例に相当し、アクセス判断部１３がアクセス判断部の一例に相当し、アクセス完了部１６がアクセス完了部の一例に相当する。
【００４３】
図２は、ゲストプログラムが動作している際の、デバイスエミュレーション支援装置５の動作を説明するためのフローチャートである。まず、ＣＰＵ１がゲストプログラムの動作を開始し、デバイスエミュレーション支援装置５が処理を開始する。なお、デバイスエミュレーション支援装置５を備えた情報処理装置が、起動時に初期化処理を行うことで、デバイスエミュレーション支援装置５の処理を開始してもよい。
【００４４】
まず、アクセス監視部１１は、バス４上に流れる信号を監視し、アクセスが発生したか否かを判断する（ステップＳ１）。アクセスが発生していない場合（ステップＳ１でＮＯ）、アクセス監視部１１は、アクセスが発生するまで、監視を継続する。アクセスが発生した場合（ステップＳ１でＹＥＳ）、アクセス監視部１１は、発生したアクセスのアクセス内容を取得する（ステップＳ２）。
【００４５】
次に、アクセス監視部１１は、発生したアクセスがトラップ対象のアクセスであるか否かを判断する（ステップＳ３）。すなわち、アクセス監視部１１は、取得したアクセス内容に含まれるアドレスが、監視アドレス設定部１０に設定されているトラップ対象のアドレス範囲に合致するか否かを判断し、アドレスが合致するアクセス（トラップ対象のアクセス）の発生を検知する。なお、監視アドレス設定部１０に、アドレス範囲以外の条件も設定されている場合、アクセス監視部１１は、それらの条件についても、合致しているか否かを判断する。発生したアクセスがトラップ対象のアクセスでない場合（ステップＳ３でＮＯ）、ステップＳ１の処理に遷移し、処理を繰り返す。
【００４６】
一方、発生したアクセスがトラップ対象のアクセスである場合（ステップＳ３でＹＥＳ）、アクセス監視部１１は、発生したアクセスのアクセス内容を、アクセス判断部１３に通知する（ステップＳ４）。
【００４７】
次に、アクセス判断部１３は、アクセス監視部１１から通知されたアクセス内容と、アクセス記憶部１２に記憶している直前のアクセス（前回トラップされたアクセス）のアクセス内容とを比較する。すなわち、アクセス判断部１３は、今回発生したアクセスが、アクセス記憶部１２に記憶している直前のアクセスと同じであるか否かを判断する（ステップＳ５）。
【００４８】
なお、アクセス判断部１３は、少なくともアクセス先のアドレスを比較しているが、アクセスが同一命令によるものかの判断に用いることができる他の情報を比較してもよい。リードするデータサイズ及びライトするデータサイズを指定できる命令セットを有するＣＰＵの場合、データサイズを判断に用いてもよい。また、バースト転送の可能な情報処理装置ならば、バースト転送の有無及び転送サイズを判断に用いてもよい。
【００４９】
発生したアクセスが直前のアクセスと異なっていると判断した場合（ステップＳ５でＮＯ）、アクセス判断部１３は、アクセス記憶部１２に新しいアクセスのアクセス内容を直前のアクセスのアクセス内容として格納し、例外を発生させるための例外発生要求を例外発生部１４に出力する（ステップＳ６）。例外発生部１４は、アクセス判断部１３によって出力された例外発生要求を受け取り、例外を発生させるための例外通知をＣＰＵ１に出力する（ステップＳ７）。
【００５０】
一方、発生したアクセスが直前のアクセスと同じであると判定した場合（ステップＳ５でＹＥＳ）、アクセス判断部１３は、命令の再実行と判断し、アクセス記憶部１２に記憶されている直前のアクセスのアクセス内容を消去し、アクセス完了部１６に新しいアクセスのアクセス内容を通知する（ステップＳ８）。
【００５１】
次に、アクセス完了部１６は、アクセス判断部１３によって通知されたアクセス内容が、データをメモリから読み出すリードアクセス及びデータをメモリに書き込むライトアクセスのいずれであるかを判断する（ステップＳ９）。
【００５２】
アクセス内容がリードアクセスであると判断した場合（ステップＳ９で“リードアクセス”）、アクセス完了部１６は、リードデータ設定部１５に保持されているリードデータを取得し、取得したリードデータをバス４に出力する（ステップＳ１０）。次に、アクセス完了部１６は、再実行されたリードアクセスを完了し（ステップＳ１１）、ステップＳ１の処理に戻す。これにより、ステップＳ１以降の処理が繰り返し実行される。
【００５３】
一方、アクセス内容がライトアクセスであると判断した場合（ステップＳ９で“ライトアクセス”）、アクセス完了部１６は、再実行されたライトアクセスを完了し（ステップＳ１２）、ステップＳ１の処理に戻す。これにより、ステップＳ１以降の処理が繰り返し実行される。
【００５４】
なお、ゲストプログラムが動作を終了した際に、デバイスエミュレーション支援装置５は、アクセスの監視を終了し、図２に示した処理を完了する。また、デバイスエミュレーション支援装置５を備えた情報処理装置の起動中は、デバイスエミュレーション支援装置５がアクセスの監視を継続する実装でもよい。
【００５５】
図３は、本発明の実施の形態１におけるデバイスエミュレーション支援装置５で用いるレジスタの構成の一例を示す図である。前述したとおり、ＣＰＵ１による処理（リード処理又はライト処理）を可能とするため、複数のレジスタがＣＰＵ１のアドレス空間に配置されている。
【００５６】
監視アドレス設定部１０は、トラップ対象のアドレス範囲を設定するレジスタである。図３に示すように、監視アドレス設定部１０は、対象とする監視アドレス領域の先頭アドレスと、監視アドレス領域のサイズとを組みにして保持している。監視アドレス設定部１０は、複数の組みを保持することが可能である。
【００５７】
アクセス記憶部１２は、トラップしたアクセスのアクセス内容を記憶するレジスタである。アクセス記憶部１２は、アクセスが発生してから完了するまで、処理中のアクセスのアクセス内容を保持している。図３に示すように、アクセス記憶部１２は、アクセス内容として、アクセス先のアドレスと、リードアクセスであるかライトアクセスであるかを表すアクセス種別と、アクセス種別がライトアクセスである場合のライトする値（ライトデータ）とを記憶している。
【００５８】
リードデータ設定部１５は、トラップしたアクセスがリードアクセスである場合に、ＣＰＵ１にリードさせるデータ（リードデータ）を設定するレジスタである。
【００５９】
なお、アクセス記憶部１２のライトデータと、リードデータ設定部１５のリードデータとは、ＣＰＵ１によるバーストリード処理及びバーストライト処理に対応するため、バースト転送の最大サイズまでのレジスタ数を設けている。
【００６０】
図４は、本実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェア構成の一例を示す図である。
【００６１】
図４では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとする。つまり、デバイスドライバ２０は、ゲストプログラムであり、存在していない周辺デバイスへアクセスする。
【００６２】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５が動作する。デバイスエミュレーション支援装置５は、ＣＰＵ１に例外通知を出力して、ＣＰＵ１に例外を発生させる。ＣＰＵ１からの例外を受けてＯＳ２１内の例外ハンドラ２３が動作する。例外ハンドラ２３は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断し、デバイスエミュレーション支援装置５によって発生した例外の場合、エミュレーションプログラム２４を動作させる。
【００６３】
エミュレーションプログラム２４は、デバイスエミュレーション支援装置５のアクセス記憶部１２から、アクセス内容を取得し、エミュレーションを行う周辺デバイスを特定し、特定した周辺デバイスに対応するエミュレーションを行う。これにより、情報処理装置は、ゲストプログラムであるデバイスドライバ２０をそのまま利用できる。したがって、例えばアプリケーション２２がデバイスドライバ２０の仕様に依存するものであっても、デバイスドライバ２０との依存関係を改変することなく情報処理装置を動作させることができる。
【００６４】
図５は、本実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェア構成の第１の変形例を示す図である。
【００６５】
図５では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとする。ゲストプログラム２５は、デバイスドライバ２０と、ＯＳ２１と、アプリケーション２２とを含む。つまり、備えている周辺デバイスが互いに異なるハードウェアを前提に作られたソフトウェアのシステム全体がゲストプログラムとなる。図５では、情報処理装置は、周辺デバイスのエミュレーションを制御する仮想化層２６を有しており、仮想化層２６は、例外制御部２７を備えている。
【００６６】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外通知を出力して、ＣＰＵ１に例外を発生させる。ＣＰＵ１は、例外通知を受け取ると、仮想化層２６の例外制御部２７に対して例外処理の実行を指示する。仮想化層２６は、ＣＰＵ１からの例外処理の実行指示を受けて、例外制御部２７を最初に動作させる。
【００６７】
例外制御部２７は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断する。デバイスエミュレーション支援装置５によって発生した例外の場合、例外制御部２７は、エミュレーションプログラム２４を動作させる。デバイスエミュレーション支援装置５によって発生した例外でない場合、例外制御部２７は、ＯＳ２１内の例外ハンドラ２３へ制御を移す。これにより、ゲストプログラム２５内のデバイスドライバ２０が周辺デバイスにアクセスした時に、エミュレーションプログラム２４が動作する。
【００６８】
図６は、本実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェア構成の第２の変形例を示す図である。
【００６９】
図６では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとする。また、仮想化層２６は、複数の仮想計算機を制御する。この仮想化層２６は、ハイパバイザーと呼ばれており、一つの物理的な計算機の上で複数の仮想的な計算機（仮想計算機）を実行制御する。図６では、情報処理装置は、第１の仮想計算機２８及び第２の仮想計算機２９を備える。第１の仮想計算機２８がゲストプログラムとして動作する。第２の仮想計算機２９は、エミュレーションプログラム２４を実行する。
【００７０】
仮想化層２６は、エミュレーションプログラム２４を実行する第２の仮想計算機２９と、ゲストプログラム２５を実行する第１の仮想計算機２８とを時分割で動作させる機能を有する。更に、仮想化層２６は、例外制御部２７を備えている。
【００７１】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外通知を出力して、ＣＰＵ１に例外を発生させる。ＣＰＵ１は、例外通知を受け取ると、仮想化層２６の例外制御部２７に対して例外処理の実行を指示する。仮想化層２６は、ＣＰＵ１からの例外処理の実行指示を受けて、例外制御部２７を最初に動作させる。
【００７２】
例外制御部２７は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断する。デバイスエミュレーション支援装置５によって発生した例外の場合、例外制御部２７は、エミュレーションプログラム２４を動作させる。デバイスエミュレーション支援装置５によって発生した例外でない場合、例外制御部２７は、ＯＳ２１内の例外ハンドラ２３へ制御を移す。これにより、ゲストプログラム２５内のデバイスドライバ２０が周辺デバイスにアクセスした時に、エミュレーションプログラム２４が動作する。
【００７３】
なお、周辺デバイスには、ＤＭＡ、デコードエンジン及びエンコードエンジンのように、ＣＰＵと平行して動作するものがある。このような周辺デバイスをエミュレーションする場合、ゲストプログラムの実行と、周辺デバイスのエミュレーションによるデータの処理とを並行して行うのが望ましい。図６に示すソフトウェア構成を用いる場合、ゲストプログラム２５とエミュレーションプログラム２４とを時分割的に並行して動作させることが可能となる。
【００７４】
図７は、本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のリードアクセス時のエミュレーション処理の一例を示すフローチャートである。図７では、リードアクセスのエミュレーションについて示している。
【００７５】
ＣＰＵ１は、ゲストプログラムを実行し、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタからデータを読み出すリードアクセスを実行する（ステップＳ２１）。
【００７６】
次に、デバイスエミュレーション支援装置５は、このリードアクセスの発生を検知することでリードアクセスのアクセス内容をトラップし、トラップしたアクセス内容をアクセス記憶部１２に記憶する（ステップＳ２２）。次に、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外を発生させる（ステップＳ２３）。なお、ステップＳ２２の処理は、前述した図２のステップＳ１〜Ｓ５の処理に相当し、ステップＳ２３の処理は、前述した図２のステップＳ６〜Ｓ７の処理に相当する。
【００７７】
なお、ここで発生する例外は、ステップＳ２１のリードアクセスが発生したタイミングで、例外ハンドラ２３と例外制御部２７とへ制御を移し、かつ、アクセスを発生させた命令を無効化する性質を有する必要がある。データアボート例外は、前述した性質を持つ例外であることが多い。デバイスエミュレーション支援装置５は、ＣＰＵ１の仕様において、前述した性質を有する例外を発生させる。
【００７８】
次に、例外ハンドラ２３又は例外制御部２７は、ＣＰＵ１からの例外処理の実行指示を受け、発生した例外がデバイスエミュレーション支援装置５により発生した例外と判断し、エミュレーションプログラム２４を呼び出す（ステップＳ２４）。なお、エミュレーションプログラム２４を呼び出す方法の例は、既に、図４〜図６のソフトウェア構成の例で示している。
【００７９】
次に、ＣＰＵ１は、呼び出されたエミュレーションプログラム２４を実行し、トラップしたアクセス内容を取得する（ステップＳ２５）。具体的には、エミュレーションプログラム２４を実行したＣＰＵ１は、アクセス記憶部１２の制御レジスタから、アクセス先のアドレスを含むアクセス内容を取得する。
【００８０】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、取得したアクセス内容を用いて、存在しない周辺デバイスのエミュレーション処理を実行する（ステップＳ２６）。エミュレーションプログラム２４を実行したＣＰＵ１は、ゲストプログラムを実行することによって発行されたリードアクセスのアクセス内容を取得済みなので、取得した情報（リードアクセスのアクセス内容）を用いて周辺デバイスが行う処理をエミュレートし、仮想的な制御レジスタにアクセスする際にリードされるべきリードデータを用意する。
【００８１】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、用意したリードされるべきリードデータをリードデータ設定部１５に設定する（ステップＳ２７）。そして、エミュレーションプログラム２４を実行したＣＰＵ１は、周辺デバイスのエミュレーション処理を終了させる。次に、例外ハンドラ２３又は例外制御部２７は、ゲストプログラムを復帰させる（ステップＳ２８）。この時、ＣＰＵ１は、ゲストプログラムを再度実行することにより、ステップＳ２１のリードアクセスを発生させた命令に復帰することになる。
【００８２】
すなわち、ＣＰＵ１は、例外発生部１４によって出力された例外発生通知を受信した場合、例外を発生することによりエミュレーション処理を実行し、その後、周辺デバイス３に出力されたアクセス信号と同じアクセス信号を再び周辺デバイス３へ出力する。
【００８３】
同じ命令に復帰したので、ゲストプログラムを実行したＣＰＵ１は、再び、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタからデータを読み出すリードアクセスを実行する（ステップＳ２９）。すなわち、ステップＳ２９におけるリードアクセスは、ステップＳ２１におけるリードアクセスと同じ処理である。
【００８４】
次に、デバイスエミュレーション支援装置５は、このリードアクセスの発生を検知することでリードアクセスのアクセス内容をトラップし、ステップＳ２２で記憶した直前のアクセス内容を、アクセス記憶部１２から消去する（ステップＳ３０）。つまり、トラップしたアクセス内容が、ステップＳ２２で記憶した直前のアクセスのアクセス内容と同じなので、例外は発生しない。ステップＳ３０の処理は、前述した図２のステップＳ１〜Ｓ５及びＳ８の処理に相当する。
【００８５】
次に、デバイスエミュレーション支援装置５は、ステップＳ２７において設定されたリードデータをバス４に出力する（ステップＳ３１）。ステップＳ３１の処理は、前述した図２のステップＳ１０の処理に相当する。
【００８６】
最後に、ゲストプログラムを実行したＣＰＵ１は、バス４に出力されたリードデータをリードアクセスの結果として受け取り、エミュレーション対象である周辺デバイスのアドレス領域からデータを読み出すリードアクセスを完了する（ステップＳ３２）。
【００８７】
以上により、本実施の形態１のデバイスエミュレーション支援装置によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析及び命令の内容の取得などの、仮想的なレジスタへのアクセスに関する処理を削減することができる。つまり、従来の技術では、仮想的なレジスタのエミュレーションをソフトウェアで行う場合、図７のステップＳ２５で例外を発生させた命令をソフトウェアで解析する処理が必要となる。この解析処理として、少なくとも読み出すデータの格納先を特定する処理と、特定した格納先へデータを格納する処理とが行われる。
【００８８】
一方、本実施の形態１では、周辺デバイスのエミュレーションを、ステップＳ２７のリードデータ設定部１５へのデータの書き込みと、ステップＳ２９の命令再実行のオーバヘッドとで実現している。また、リード先アドレスのインクリメント及びデクリメントなどが自動で行われる命令の場合、命令が再実行されるので、エミュレーションにおいてリード先アドレスのインクリメント及びデクリメントなどを特に処理する必要はない。
【００８９】
図８は、本発明の実施の形態１におけるデバイスエミュレーション支援装置を備えた情報処理装置のライトアクセス時のエミュレーション処理の一例を示すフローチャートである。図８は、ライトアクセスのエミュレーションについて示している。
【００９０】
ＣＰＵ１は、ゲストプログラムを実行し、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタにデータを書き込むライトアクセスを実行する（ステップＳ４１）。
【００９１】
次に、リードアクセス時と同様に、デバイスエミュレーション支援装置５は、このライトアクセスの発生を検知することでライトアクセスのアクセス内容をトラップし、アクセス記憶部１２にトラップしたアクセス内容を記憶する（ステップＳ４２）。次に、デバイスエミュレーション支援装置５は、ＣＰＵ１に例外を発生させる（ステップＳ４３）。なお、ステップＳ４２の処理は、前述した図２のステップＳ１〜Ｓ５の処理に相当し、ステップＳ４３の処理は、前述した図２のステップＳ６〜Ｓ７の処理に相当する。
【００９２】
次に、例外ハンドラ２３又は例外制御部２７は、ＣＰＵ１からの例外処理の実行指示を受け、発生した例外がデバイスエミュレーション支援装置５により発生した例外と判断し、エミュレーションプログラム２４を呼び出す（ステップＳ４４）。
【００９３】
次に、ＣＰＵ１は、呼び出されたエミュレーションプログラム２４を実行し、トラップしたアクセスのアクセス内容を取得する（ステップＳ４５）。具体的には、エミュレーションプログラム２４を実行したＣＰＵ１は、アクセス記憶部１２の制御レジスタから、アクセス先のアドレスと、ライトされたデータとを含むアクセス内容を取得する。
【００９４】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、取得したアクセス内容を用いて、存在しない周辺デバイスのエミュレーション処理を実行する（ステップＳ４６）。エミュレーションプログラム２４を実行したＣＰＵ１は、ゲストプログラムを実行することによって発行されたライトアクセスのアクセス内容を取得済みなので、取得した情報（ライトアクセスのアクセス内容）を用いて周辺デバイスが行う処理をエミュレートする。このステップＳ４６の処理は、エミュレーション対象である周辺デバイスが、ＣＰＵと平行して動作する場合、周辺デバイスの処理を開始する処理となる。つまり、ＤＭＡをエミュレーションする場合、ステップＳ４６の処理は、データコピーを開始する処理となる。
【００９５】
次に、エミュレーションプログラム２４を実行したＣＰＵ１は、周辺デバイスのエミュレーション処理を終了させる。次に、例外ハンドラ２３又は例外制御部２７は、ゲストプログラムを復帰させる（ステップ４７）。この時、リードアクセス時と同様に、ＣＰＵ１は、ゲストプログラムを再度実行することにより、ステップＳ４１のライトアクセスを発生させた命令に復帰することになる。
【００９６】
同じ命令に復帰したので、ゲストプログラムを実行したＣＰＵ１は、再び、エミュレーション対象である周辺デバイスのアドレス領域、つまり仮想的な制御レジスタにデータを書き込むライトアクセスを実行する（ステップＳ４８）。
【００９７】
次に、デバイスエミュレーション支援装置５は、このライトアクセスの発生を検知することでライトアクセスのアクセス内容をトラップし、ステップＳ４２で記憶した直前のアクセス内容を、アクセス記憶部１２から消去する（ステップＳ４９）。つまり、トラップしたアクセス内容が、ステップＳ４２で記憶した直前のアクセスのアクセス内容と同じなので、例外は発生しない。ステップＳ４９の処理は、前述した図２のステップＳ１〜Ｓ５及びＳ８の処理に相当する。
【００９８】
次に、デバイスエミュレーション支援装置５は、アクセスが完了したことを表すアクセス完了信号をバス４に出力し、このライトアクセスを無視する（ステップＳ５０）。ステップＳ５０の処理は、前述した図２のステップＳ１２の処理に相当する。
【００９９】
最後に、ゲストプログラムを実行したＣＰＵ１は、バス４に出力されたアクセス完了信号を受け取り、エミュレーション対象である周辺デバイスのアドレス領域にデータを書き込むライトアクセスを完了する（ステップＳ５１）。
【０１００】
以上により、本実施の形態１のデバイスエミュレーション支援装置によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析及び命令の内容の取得などの、仮想的なレジスタへのアクセスに関する処理を削減することができる。つまり、リードアクセス時と同様に、従来の技術では、エミュレーションを行うソフトウェアが、命令を解析する処理、ライトするデータの格納先を特定する処理、及び、レジスタをインクリメント又はデクリメントする処理を行う必要がある。
【０１０１】
一方、本実施の形態１では、周辺デバイスのエミュレーションを、アクセス記憶部１２からのデータの読み出しと、命令再実行のオーバヘッドとで実現している。
【０１０２】
以上、本実施の形態１によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析及び命令の内容の取得などの仮想的なレジスタへのアクセスに関する処理を削減することで、効率的な周辺デバイスのエミュレーションが可能になる。ここで削減できる処理は、アクセス内容を取得するためのソフトウェアによる命令の解析、ソフトウェアによるリード時の結果の格納、及びライト時のデータの取得といった処理である。
【０１０３】
（実施の形態２）
図９は、本発明の実施の形態２におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、ＣＰＵ１、メモリ２、周辺デバイス３、バス４、デバイスエミュレーション支援装置５及び割り込みコントローラ６を備えている。
【０１０４】
ＣＰＵ１とメモリ２とバス４とは、図１の構成要素と同じ機能を有している。また、周辺デバイス３には、割り込みを用いて制御される周辺デバイスを含んでいる。本実施の形態２では、周辺デバイスＤと周辺デバイスＥとが、割り込みを用いて制御される周辺デバイスである。
【０１０５】
割り込みコントローラ６は、バス４とは異なる別の回路を介して、周辺デバイス３の中で割り込みを用いて制御される周辺デバイスＤ，Ｅと直接接続されている。割り込みコントローラ６は、ＣＰＵ１への割り込み信号を発生させることで、ＣＰＵ１に割り込み処理を行わせる。
【０１０６】
本実施の形態２のデバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５、アクセス完了部１６及び割り込み抑制部１７を備えている。監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６は、実施の形態１の構成要素と同じ機能を有しており、割り込み抑制部１７が新規追加の構成要素である。以下、新規の構成要素である割り込み抑制部１７を中心に説明する。
【０１０７】
周辺デバイスのエミュレーション処理の実行中、つまり図７のステップＳ２４〜Ｓ２８の処理又は図８のステップＳ４４〜Ｓ４７の処理の間に割り込みが発生することがある。エミュレーションプログラム２４又は例外ハンドラ２３が実行される段階で、ＣＰＵ１を割り込み禁止にする、または、割り込みコントローラ６を操作して割り込みをマスクする。これにより、制御の複雑さが低減される。この場合、ゲストプログラムが元々割り込み禁止又は割り込みマスク状態であった場合を除き、ゲストプログラムに復帰する図７のステップＳ２８又は図８のステップＳ４７の段階において、割り込み禁止又は割り込みマスク状態を解除する必要がある。
【０１０８】
割り込み禁止又は割り込みマスクが行われている期間に割り込みが発生した場合、当該割り込みは保留された状態になる。割り込み禁止又は割り込みマスクの解除後、つまりゲストプログラムの復帰後即座に、ＣＰＵ１は、割り込み信号を感知し、割り込みハンドラを実行する。つまり、図７のステップＳ２９の処理又は図８のステップＳ４８の処理における命令再実行の前に、割り込みハンドラ実行処理に移る。ここで、もし実行される割り込みハンドラ内に、アクセス記憶部１２に記憶されている直前のアクセスと同じアクセス内容のアクセスを発生させる命令があると、このアクセス（割り込み）が命令再実行によるものと判断される虞がある。
【０１０９】
そこで、本実施の形態２の割り込み抑制部１７は、命令の再実行が完了するまで、つまり図７のステップＳ３２の処理又は図８のステップＳ５１の処理までの間、割り込み信号を抑制する。これにより、上記の課題を解決する。なお、本実施の形態２において、割り込み抑制部１７が割り込み抑制部の一例に相当する。
【０１１０】
割り込み抑制部１７は、バス４とは異なる別の回路を介して、割り込みコントローラ６と直接接続されており、ＣＰＵ１への割り込み信号を抑制させる機能を有している。なお、割り込みコントローラ６が、割り込み信号を抑制する機能を持たない場合でも、例えば図１０のように割り込み信号を伝達する配線の途中に割り込み抑制部１７を接続すればよい。
【０１１１】
図１０は、本発明の実施の形態２における、割り込み抑制部と割り込みコントローラとの接続例を示す図である。割り込み抑制部１７及び割り込みコントローラ６から出力される信号がレベル信号である場合、例えば、図１０に示すように単純な論理積回路７を設けることにより、割り込み信号を抑制する機能を実現することが可能である。このような構成により、割り込み禁止又は割り込みマスクが解除された時点では、割り込みコントローラ６での割り込みの保留の有無にかかわらず、ＣＰＵ１への割り込み信号はオフになるので、割り込みは発生しない。
【０１１２】
また、割り込みの抑制は、例えば、割り込み抑制部１７に制御レジスタを設け、当該制御レジスタの操作により開始すればよい。この場合、エミュレーションプログラムが実行されることにより割り込み抑制が開始される。あるいは、割り込み抑制部１７は、アクセスをトラップしたタイミング（図７のステップＳ２１又は図８のステップＳ４１）で、アクセス監視部１１から通知を受け、割り込み抑制を開始してもよい。
【０１１３】
さらに、割り込み抑制部１７は、アクセス記憶部１２に記憶されているアクセス内容が消去された時点でＣＰＵ１から通知を受け取ることで、割り込み抑制を解除する。これにより、命令再実行の完了時に、割り込み抑制が解除される。割り込みが保留されていた場合、命令再実行の完了後に、ＣＰＵ１は、割り込み信号を検知し、割り込み処理を実行する。
【０１１４】
以上のように、本実施の形態２では、ゲストプログラムによる、存在していない周辺デバイスの制御レジスタへのアクセスと同じアクセスを割り込みハンドラに設けることが可能となる。これにより、割り込みを用いて制御される周辺デバイスをエミュレーション対象の周辺デバイスとすることができる。
【０１１５】
（実施の形態３）
図１１は、本発明の実施の形態３におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、ＣＰＵ１、メモリ２、周辺デバイス３、バス４及びデバイスエミュレーション支援装置５を備えている。
【０１１６】
本実施の形態３では、周辺デバイス３は、デバイスエミュレーション支援装置５に直接接続しており、デバイスエミュレーション支援装置５を介してＣＰＵ１と接続している。つまり、デバイスエミュレーション支援装置５は、ＣＰＵ１と周辺デバイス３との間に配置される。なお、ＣＰＵ１とメモリ２とバス４とは、図１の構成要素と同じ機能を有している。また、周辺デバイス３は、デバイスエミュレーション支援装置５を介してバス４と接続している。
【０１１７】
本実施の形態３のデバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部３１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５、アクセス完了部１６及びバス信号制御部１８を備えている。監視アドレス設定部１０、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６は、実施の形態１の構成要素と同じ機能を有しており、アクセス監視部３１とバス信号制御部１８とが実施の形態１と異なっている。以下、アクセス監視部３１とバス信号制御部１８とを中心に説明する。
【０１１８】
本実施の形態３では、ＣＰＵ１からバス４に出力された信号は、まずデバイスエミュレーション支援装置５に伝達され、周辺デバイス３には伝達されない。
【０１１９】
アクセス監視部３１は、バス４上に流れる信号を監視し、監視アドレス設定部１０に設定されているアドレス範囲を含む条件に合致するアクセスの発生を検知する。この信号には、アクセス対象のアドレス、アクセスがリードであるかライトであるかを表す種別、及び、リードするデータまたはライトするデータのデータサイズなどのアクセス内容に関する情報が含まれている。そのため、アクセス監視部３１は、バス４上に流れる信号を監視することで、ＣＰＵ１による、アドレス空間へのアクセスを検知することができる。また、アクセス監視部３１は、検知した条件に合致するアクセス内容を、アクセス判断部１３に通知する。さらに、アクセス監視部３１は、条件に合致しなかったアクセス内容を、バス信号制御部１８に通知する。
【０１２０】
すなわち、アクセス監視部３１は、ＣＰＵ１から周辺デバイス３へのアクセスを監視し、ＣＰＵ１から周辺デバイス３に向けて出力されるアクセス信号から、監視アドレス設定部１０に記憶されているアドレスに合致するアドレスを含むアクセス内容を、アクセス記憶部１２及びアクセス判断部１３に出力する。また、アクセス監視部３１は、監視アドレス設定部１０に記憶されているアドレスに合致しないアドレスを含むアクセス内容を、バス信号制御部１８に通知する。
【０１２１】
バス信号制御部１８は、ＣＰＵ１から周辺デバイス３に向けて出力されるアクセス信号を受信し、受信したアクセス信号を周辺デバイス３に出力するか否かを判断する。バス信号制御部１８は、アクセス監視部３１からアクセス内容が通知された場合、当該アクセス内容を有するアクセス信号を周辺デバイス３に出力する。バス信号制御部１８は、アクセス監視部３１からアクセス内容の通知を受けて動作し、アクセスがトラップされなかった場合にのみ、ＣＰＵ１からの信号を周辺デバイス３に伝達する。つまり、デバイスエミュレーション支援装置５によりアクセスがトラップされた場合、周辺デバイス３には、ＣＰＵ１からのアクセスは発生しない。従って、実在しない仮想的な周辺デバイスの制御レジスタのアドレスが、実際に存在する周辺デバイス３のアドレスと重なっていた場合、バス信号制御部１８は、ＣＰＵ１からの信号を周辺デバイス３へ通知しない。そのため、周辺デバイス３がＣＰＵ１に応答することはない。
【０１２２】
なお、本実施の形態３において、アクセス監視部３１がアクセス監視部の一例に相当し、バス信号制御部１８がバス信号制御部の一例に相当する。
【０１２３】
本実施の形態３では、上記の構成により、仮想的な周辺デバイスの制御レジスタと、実在する周辺デバイス３の制御レジスタとのアドレスが同一であっても、周辺デバイスのエミュレーションが可能である。
【０１２４】
なお、本実施の形態３において、デバイスエミュレーション支援装置５が、実施の形態２の割り込み抑制部１７を更に備える構成であってもよい。
【０１２５】
（実施の形態４）
図１２は、本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置の構成を示す図である。情報処理装置は、第１のＣＰＵ１Ａ、第２のＣＰＵ１Ｂ、メモリ２、周辺デバイス３、バス４及びデバイスエミュレーション支援装置５を備えている。なお、メモリ２と周辺デバイス３とバス４とは、図１の構成要素と同じ機能を有している。
【０１２６】
本実施の形態４の情報処理装置は、２つのＣＰＵを備えており、デバイスエミュレーション支援装置５は、特定のＣＰＵ、例えば第１のＣＰＵ１Ａにのみ例外を発生させる。
【０１２７】
本実施の形態４のデバイスエミュレーション支援装置５は、監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、リードデータ設定部１５、アクセス完了部１６及び特定ＣＰＵ例外発生部１９を備えている。監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、リードデータ設定部１５及びアクセス完了部１６は、実施の形態１の構成要素と同じ機能を有している。本実施の形態４のデバイスエミュレーション支援装置５は、実施の形態１の例外発生部１４の代わりに特定ＣＰＵ例外発生部１９を備える。以下、新規の構成要素である特定ＣＰＵ例外発生部１９を中心に説明する。
【０１２８】
特定ＣＰＵ例外発生部１９は、バス４とは異なる別の回路を介して、特定のＣＰＵである第１のＣＰＵ１Ａと直接接続しており、信号を発生することで例外を通知する機能を有している。特定ＣＰＵ例外発生部１９は、アクセス判断部１３によって今回のアクセス内容が前回のアクセス内容と異なると判断された場合に、アクセス判断部１３から例外発生要求を受け取り、第１のＣＰＵ１Ａに例外を発生させる。具体的には、特定ＣＰＵ例外発生部１９は、第１のＣＰＵ１Ａの例外に関係する端子に直接接続し、例外を発生させるための例外通知を第１のＣＰＵ１Ａに出力する。第１のＣＰＵ１Ａは、この例外を契機に、エミュレーションプログラムを動作させることができる。特定ＣＰＵ例外発生部１９は、複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ例外通知を送信する。
【０１２９】
なお、本実施の形態４において、特定ＣＰＵ例外発生部１９が例外発生部の一例に相当する。
【０１３０】
図１３は、本実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の一例を示す図である。
【０１３１】
図１３では、情報処理装置は、デバイスドライバ２０に対応する周辺デバイスを備えていないものとし、デバイスドライバ２０と、ＯＳ２１と、アプリケーション２２とが、ゲストプログラム２５であるとする。また、例外の発生する第１のＣＰＵ１Ａは、ゲストプログラム２５と、例外制御部２７を備えた仮想化層２６とを実行する。一方、第２のＣＰＵ１Ｂは、エミュレーションプログラム２４を実行する。
【０１３２】
情報処理装置上で動作するアプリケーション２２が、デバイスドライバ２０が制御する周辺デバイスへのアクセスを発生させた際、デバイスエミュレーション支援装置５は、第１のＣＰＵ１Ａに例外通知を出力して、第１のＣＰＵ１Ａに例外を発生させる。第１のＣＰＵ１Ａは、例外通知を受け取ると、仮想化層２６の例外制御部２７に対して例外処理の実行を指示する。仮想化層２６は、第１のＣＰＵ１Ａからの例外処理の実行指示を受けて、例外制御部２７を最初に動作させる。
【０１３３】
例外制御部２７は、発生した例外がデバイスエミュレーション支援装置５により発生したか否かを判断する。デバイスエミュレーション支援装置５によって発生した例外の場合、第１のＣＰＵ１Ａは、一般的なＣＰＵ間の通信機能などを用いて第２のＣＰＵ１Ｂ上のエミュレーションプログラム２４に通知する。第２のＣＰＵ１Ｂは、周辺デバイスのエミュレーション処理を実行する。デバイスエミュレーション支援装置５によって発生した例外でない場合、ＯＳ２１内の例外ハンドラ２３へ制御を移す。これにより、ゲストプログラム２５内のデバイスドライバ２０が周辺デバイスにアクセスした時に、エミュレーションプログラム２４が動作する。
【０１３４】
なお、図１３では、仮想化層２６が、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させているが、ＯＳ２１が、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させてもよい。
【０１３５】
また、エミュレーションプログラム２４を２つに分割し、第１のＣＰＵ１Ａは、制御レジスタへのデータのリード及びデータのライトに関するエミュレーション処理部分を実行してもよい。この場合、第１のＣＰＵ１Ａは、図４又は図５のような構成となる。第２のＣＰＵ１Ｂは、ＤＭＡによるデータ転送処理、エンコード処理及びデコード処理等の、第１のＣＰＵ１Ａと並列に動作する周辺デバイスのデータ処理部分を実行する。
【０１３６】
図１４は、本発明の実施の形態４におけるデバイスエミュレーション支援装置を備えた情報処理装置のソフトウェアの構成の変形例を示す図である。
【０１３７】
図１４において、第１のＣＰＵ１Ａは、エミュレーションプログラム２４と、例外制御部２７を備えた仮想化層２６とを実行する。一方、第２のＣＰＵ１Ｂは、デバイスドライバ２０、ＯＳ２１及びアプリケーション２２を備えたゲストプログラム２５を実行する。
【０１３８】
図１４では、ゲストプログラム２５は、デバイスエミュレーション支援装置５からの例外通知が入力されない第２のＣＰＵ１Ｂで実行される。デバイスエミュレーション支援装置５からの例外発生時は、第１のＣＰＵ１Ａでエミュレーションプログラム２４が実行される。
【０１３９】
なお、図１４では、仮想化層２６が、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させているが、第１のＣＰＵ１ＡでもＯＳを備える構成とし、第１のＣＰＵ１ＡのＯＳが、例外処理の実行指示を受け取り、エミュレーションプログラム２４を実行させてもよい。また、第１のＣＰＵ１ＡのＯＳの例外ハンドラに直接エミュレーションプログラム２４を実装してもよい。
【０１４０】
以上、本実施の形態４によれば、エミュレーションを行うソフトウェアが、トラップした命令の解析、及びレジスタをインクリメント又はデクリメントするなどの命令の実行に関連する整合性の維持などの仮想的な制御レジスタへのアクセスに関する処理を行なう必要がなく、周辺デバイスのエミュレーションを行うことができる。これにより、エミュレーションにおける処理量を削減することが可能となり、周辺デバイスのエミュレーションの効率を向上することができる。
【０１４１】
なお、実施の形態１、実施の形態２及び実施の形態３では、ＣＰＵ１が単独である場合を示したがこれに限るものではない。ＯＳ等の制御で複数のＣＰＵを用いて処理を行なう情報処理装置にも、本実施の形態１、実施の形態２及び実施の形態３のデバイスエミュレーション支援装置を用いることができる。また、実施の形態４でも、第１のＣＰＵ１Ａ又は第２のＣＰＵ１Ｂはそれぞれ複数のＣＰＵで構成されてもよい。
【０１４２】
また、本実施の形態１〜４のデバイスエミュレーション支援装置は、集積回路であるＬＳＩとして実現できるが、これらは個別に１チップ化されてもよいし、一部又は全てを含むように１チップ化されてもよい。ここでは、ＬＳＩとしたが、集積度の違いにより、ＩＣ、システムＬＳＩ、スーパーＬＳＩ又はウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  ＰｒｏｇｒａｍｍａｂｌｅＧａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用してもよい。さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
【０１４３】
（実施の形態５）
図１５は、本発明の実施の形態５におけるデバイスエミュレーション支援回路を備えた情報処理装置の構成を示す図である。図１５に示す情報処理装置は、ＣＰＵ１、メモリ２、周辺デバイス３及びデバイスエミュレーション支援回路５１を備えている。
【０１４４】
デバイスエミュレーション支援回路５１は、集積回路である。デバイスエミュレーション支援回路５１は、監視アドレス設定回路１１０、アクセス監視回路１１１、アクセス記憶回路１１２、アクセス判断回路１１３、例外発生回路１１４、リードデータ設定回路１１５及びアクセス完了回路１１６を備えている。なお、図１５に示す実施の形態５の情報処理装置において、実施の形態１と同じ構成については、同じ符号を付し、説明を省略する。
【０１４５】
実施の形態５における監視アドレス設定回路１１０、アクセス監視回路１１１、アクセス記憶回路１１２、アクセス判断回路１１３、例外発生回路１１４、リードデータ設定回路１１５及びアクセス完了回路１１６は、それぞれ、実施の形態１における監視アドレス設定部１０、アクセス監視部１１、アクセス記憶部１２、アクセス判断部１３、例外発生部１４、リードデータ設定部１５及びアクセス完了部１６と同じ機能を有している。
【０１４６】
なお、本実施の形態５において、監視アドレス設定回路１１０が監視アドレス記憶回路の一例に相当し、アクセス監視回路１１１がアクセス監視回路の一例に相当し、アクセス記憶回路１１２がアクセス記憶回路の一例に相当し、リードデータ設定回路１１５がリードデータ記憶回路の一例に相当し、例外発生回路１１４が例外発生回路の一例に相当し、アクセス判断回路１１３がアクセス判断回路の一例に相当し、アクセス完了回路１１６がアクセス完了回路の一例に相当する。
【０１４７】
このように、監視アドレス設定回路１１０、アクセス監視回路１１１、アクセス記憶回路１１２、アクセス判断回路１１３、例外発生回路１１４、リードデータ設定回路１１５及びアクセス完了回路１１６は、１つの集積回路に搭載することができる。
【０１４８】
なお、上述した具体的実施形態には以下の構成を有する発明が主に含まれている。
【０１４９】
本発明の一局面に係るデバイスエミュレーション支援装置は、バスを介してＣＰＵと通信可能に接続されたデバイスエミュレーション支援装置であって、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶部と、前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である前記周辺装置に対応するアドレスを含むアクセス情報を有し、前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視部と、前記アクセス監視部によって取得されたアクセス情報を記憶するアクセス記憶部と、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶部と、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生部と、前記アクセス監視部によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記例外発生部に例外の発生を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断部と、前記アクセス監視部によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記アクセスを完了し、前記アクセス監視部によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記アクセスを完了するアクセス完了部とを備える。
【０１５０】
本発明の他の局面に係るデバイスエミュレーション支援方法は、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として監視アドレス記憶部に記憶する監視アドレス記憶ステップと、ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視ステップと、前記アクセス監視ステップにおいて取得されたアクセス情報をアクセス記憶部に記憶するアクセス記憶ステップと、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータをリードデータ記憶部に一時的に記憶するリードデータ記憶ステップと、前記アクセス監視ステップにおいて取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶部に記憶されている直前のアクセス情報とを比較するアクセス判断ステップと、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶部に記憶するとともに、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生ステップと、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶部に記憶されている直前のアクセス情報を比較の対象から除外する除外ステップと、前記アクセス監視ステップにおいて監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶部に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視ステップにおいて監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了ステップとを含む。
【０１５１】
本発明の他の局面に係るデバイスエミュレーション支援回路は、例外を発生することによりエミュレーション処理を実行するＣＰＵとバスを介して通信可能に接続されたデバイスエミュレーション支援回路であって、エミュレーション対象の周辺装置に対応するアドレスを監視の対象として記憶する監視アドレス記憶回路と、前記ＣＰＵから前記周辺装置へのアクセスを監視し、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつ前記ＣＰＵから前記周辺装置に向けて出力されるアクセス信号から、前記監視アドレス記憶回路に記憶されているアドレスに合致するアドレスを含むアクセス情報を取得するアクセス監視回路と、前記アクセス監視回路によって取得されたアクセス情報を記憶するアクセス記憶回路と、前記アクセスがデータの読み出しを表す読み出しアクセスである場合に、前記周辺装置から読み出されるデータを一時的に記憶するリードデータ記憶回路と、前記ＣＰＵに例外を発生させるための例外発生通知を前記ＣＰＵへ送信する例外発生回路と、前記アクセス監視回路によって取得されたアクセス情報を受け取り、受け取ったアクセス情報と、前記アクセス記憶回路に記憶されている直前のアクセス情報とを比較し、受け取ったアクセス情報が直前のアクセス情報と異なる場合、前記取得したアクセス情報を前記アクセス記憶回路に記憶するとともに、前記例外発生回路に前記例外発生通知の送信を要求し、受け取ったアクセス情報が直前のアクセス情報と同一の場合、前記アクセス記憶回路に記憶されている直前のアクセス情報を比較の対象から除外するアクセス判断回路と、前記アクセス監視回路によって監視されるアクセスが前記読み出しアクセスである場合、前記リードデータ記憶回路に記憶されているデータを前記ＣＰＵに出力して前記読み出しアクセスを完了するよう前記ＣＰＵに指示し、前記アクセス監視回路によって監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、前記書き込みアクセスを完了するよう前記ＣＰＵに指示するアクセス完了回路とを備える。
【０１５２】
本発明の他の局面に係る情報処理装置は、ＣＰＵと、前記ＣＰＵによって制御される周辺装置と、前記ＣＰＵから出力されたアクセス信号を前記周辺装置に伝達するバスと、上記のいずれかに記載のデバイスエミュレーション支援装置とを備える。
【０１５３】
これらの構成によれば、監視アドレス記憶部には、エミュレーション対象の周辺装置に対応するアドレスが監視の対象として記憶される。ＣＰＵから周辺装置へのアクセスが監視され、アクセス対象である周辺装置に対応するアドレスを含むアクセス情報を有し、かつＣＰＵから周辺装置に向けて出力されるアクセス信号から、監視アドレス記憶部に記憶されているアドレスに合致するアドレスを含むアクセス情報が取得される。アクセス記憶部には、取得されたアクセス情報が記憶される。また、リードデータ記憶部には、アクセスがデータの読み出しを表す読み出しアクセスである場合に、周辺装置から読み出されるデータが一時的に記憶される。取得されたアクセス情報を受け取り、受け取ったアクセス情報と、アクセス記憶部に記憶されている直前のアクセス情報とが比較される。受け取ったアクセス情報が直前のアクセス情報と異なる場合、取得したアクセス情報がアクセス記憶部に記憶されるとともに、ＣＰＵに例外を発生させるための例外発生通知がＣＰＵへ送信される。一方、受け取ったアクセス情報が直前のアクセス情報と同一の場合、アクセス記憶部に記憶されている直前のアクセス情報が比較の対象から除外される。監視されるアクセスが読み出しアクセスである場合、リードデータ記憶部に記憶されているデータがＣＰＵに出力されて読み出しアクセスを完了するようＣＰＵに指示される。また、監視されるアクセスがデータの書き込みを表す書き込みアクセスである場合、書き込みアクセスを完了するようＣＰＵに指示される。
【０１５４】
すなわち、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と異なる場合、ＣＰＵに例外を発生させることによりエミュレーション処理を実行させる。一方、受け取ったアクセス情報が、アクセス記憶部に記憶されている直前のアクセス情報と同一の場合、例外の終了に伴うアクセスの再実行と見なし、アクセスが読み出しアクセスである場合、所定のデータをＣＰＵに出力した後、読み出しアクセスを完了するようＣＰＵに指示し、アクセスが書き込みアクセスである場合、そのまま書き込みアクセスを完了するようＣＰＵに指示する。
【０１５５】
したがって、エミュレーションを行うＣＰＵによって、トラップしたアクセスの内容を解析して必要なデータを取得する処理が行われないので、エミュレーションする際の処理量を削減することができ、効率的に周辺装置のエミュレーションを行うことができる。
【０１５６】
また、上記のデバイスエミュレーション支援装置において、前記アクセス記憶部が前記アクセス判断部において比較の対象となる前記直前のアクセス情報を記憶している間、前記ＣＰＵへの割り込みを抑制する割り込み抑制部をさらに備えることが好ましい。
【０１５７】
この構成によれば、比較の対象となる直前のアクセス情報がアクセス記憶部に記憶されている間、ＣＰＵへの割り込みが抑制される。
【０１５８】
すなわち、エミュレーションの途中で、アクセス記憶部に記憶されている直前のアクセス情報と同じアクセス情報を有するアクセスが割り込み処理として実行された場合、例外の終了に伴うアクセスの再実行と見なされてしまう。
【０１５９】
そこで、比較の対象となる直前のアクセス情報がアクセス記憶部に記憶されている間、ＣＰＵへの割り込みが抑制されるので、割り込みにより制御される周辺装置をエミュレーション対象の周辺装置とすることができる。
【０１６０】
また、上記のデバイスエミュレーション支援装置において、前記ＣＰＵから前記周辺装置に向けて出力される前記アクセス信号を受信し、受信した前記アクセス信号を前記周辺装置に出力するか否かを判断するバス信号制御部をさらに備え、前記アクセス監視部は、前記監視アドレス記憶部に記憶されているアドレスに合致しないアドレスを含むアクセス情報を、前記バス信号制御部に通知し、前記バス信号制御部は、前記アクセス監視部から前記アクセス情報が通知された場合、当該アクセス情報を有する前記アクセス信号を前記周辺装置に出力することが好ましい。
【０１６１】
この構成によれば、バス信号制御部は、ＣＰＵから周辺装置に向けて出力されるアクセス信号を受信する。そして、監視アドレス記憶部に記憶されているアドレスに合致しないアドレスを含むアクセス情報が、バス信号制御部に通知される。バス信号制御部は、アクセス情報が通知された場合、当該アクセス情報を有するアクセス信号を周辺装置に出力する。
【０１６２】
したがって、ＣＰＵからエミュレーション対象でない周辺装置へ送られるアクセス信号のみが周辺装置へ出力されるので、エミュレーション対象である周辺装置のアドレスと、実在する周辺装置のアドレスとが同じ場合であっても、確実にエミュレーションを行うとともに、実在する周辺装置を制御することができる。
【０１６３】
また、上記のデバイスエミュレーション支援装置において、前記ＣＰＵは、複数のＣＰＵを含み、前記例外発生部は、前記複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ前記例外発生通知を送信することが好ましい。
【０１６４】
この構成によれば、複数のＣＰＵのうちの予め決められた特定のＣＰＵにのみ例外発生通知が送信されるので、特定のＣＰＵにおいて、例外を発生させることによりエミュレーションを行わせると同時に、他のＣＰＵにおいて、他のプログラムを実行させることができる。
【０１６５】
また、上記のデバイスエミュレーション支援装置において、前記アクセス情報は、アクセス対象である前記周辺装置に対応するアドレスと、前記アクセスが前記読み出しアクセス及び前記書き込みアクセスのいずれであるかを表すアクセス種別と、前記アクセス種別が前記書き込みアクセスである場合に前記周辺装置に書き込まれる値とを少なくとも含むことが好ましい。
【０１６６】
この構成によれば、アクセス情報に含まれるアドレスを用いて、ＣＰＵからエミュレーション対象である周辺装置へのアクセスを特定することができ、アクセス情報に含まれるアクセス種別を用いて、アクセスが読み出しアクセス及び書き込みアクセスのいずれであるかを特定することができる。また、アクセス情報に含まれる値を用いて、アクセス種別が書き込みアクセスである場合に周辺装置に当該値を書き込むことができる。
【０１６７】
また、上記のデバイスエミュレーション支援装置において、前記ＣＰＵは、前記例外発生部によって出力された前記例外発生通知を受信した場合、例外を発生することによりエミュレーション処理を実行し、その後、前記周辺装置に出力された前記アクセス信号と同じアクセス信号を再び前記周辺装置へ出力することが好ましい。
【０１６８】
この構成によれば、ＣＰＵによって、例外発生通知が受信された場合、例外を発生することによりエミュレーション処理が実行され、その後、周辺装置に出力されたアクセス信号と同じアクセス信号が再び周辺装置へ出力される。
【０１６９】
したがって、最初のアクセス信号が出力されることにより、エミュレーション処理が実行され、最初のアクセス信号と同じアクセス信号が再び出力されることにより、読み出しアクセスに対応するデータがＣＰＵに送られ、アクセスが完了されるので、ＣＰＵが周辺装置にアクセスすることなく、エミュレーション処理を行うことができる。
【０１７０】
なお、発明を実施するための形態の項においてなされた具体的な実施態様または実施例は、あくまでも、本発明の技術内容を明らかにするものであって、そのような具体例にのみ限定して狭義に解釈されるべきものではなく、本発明の精神と次に記載する特許請求事項との範囲内で、種々変更して実施することができるものである。
【産業上の利用可能性】
【０１７１】
本発明に係るデバイスエミュレーション支援装置、デバイスエミュレーション支援方法、デバイスエミュレーション支援回路及び情報処理装置は、例えば、大型計算機又はパーソナルコンピュータのような形態のみならず、各種の家電機器、携帯電話のような通信機器、産業機器又は乗用機器などにも利用可能である。
【手続補正３】
【補正対象書類名】図面
【補正対象項目名】全図
【補正方法】変更
【補正の内容】
【図１】
2009144892.tif 000018
【図２】
2009144892.tif 000019
【図３】
2009144892.tif 000020
【図４】
2009144892.tif 000021
【図５】
2009144892.tif 000022
【図６】
2009144892.tif 000023
【図７】
2009144892.tif 000024
【図８】
2009144892.tif 000025
【図９】
2009144892.tif 000026
【図１０】
2009144892.tif 000027
【図１１】
2009144892.tif 000028
【図１２】
2009144892.tif 000029
【図１３】
2009144892.tif 000030
【図１４】
2009144892.tif 000031
【図１５】
2009144892.tif 000032
【国際調査報告】
2009144892.tif 000033
2009144892.tif 000034
2009144892.tif 000035
2009144892.tif 000036