JPH08190485A - エミュレーション装置 - Google Patents

エミュレーション装置

Info

Publication number
JPH08190485A
JPH08190485A JP7170330A JP17033095A JPH08190485A JP H08190485 A JPH08190485 A JP H08190485A JP 7170330 A JP7170330 A JP 7170330A JP 17033095 A JP17033095 A JP 17033095A JP H08190485 A JPH08190485 A JP H08190485A
Authority
JP
Japan
Prior art keywords
execution
machine
module
emulation
calling
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP7170330A
Other languages
English (en)
Inventor
Hideaki Ogata
英昭 緒方
Yasushi Nakaoka
康 中岡
Akihito Tanimoto
晃仁 谷本
Masanori Kojima
政典 小島
Yutaka Akahori
豊 赤堀
Makoto Murakami
誠 村上
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Seiko Epson Corp
Original Assignee
Seiko Epson Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Seiko Epson Corp filed Critical Seiko Epson Corp
Priority to JP7170330A priority Critical patent/JPH08190485A/ja
Publication of JPH08190485A publication Critical patent/JPH08190485A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

(57)【要約】 【目的】 ターゲットマシンの動作を実行マシン上でエ
ミュレートするエミュレーション装置において、簡略な
構成でエミュレーションの範囲を拡大する。 【構成】 ターゲットマシンの機能毎に用意された実行
モジュールをカーネルKRからディスパッチャDPを介
して呼び出すが、この呼出アドレスは、各実行モジュー
ルがその組み込み時に自分でディスパッチャテーブルD
Tに登録しておく。例えばキーボード72からの入力が
なされると、ハードウェア上の割込が生じてキーボード
エミュレータKEMが呼ばれ、変換後のキーコードをバ
ッファDFに格納した後、モジュール間通信により割り
込みコントローラエミュレータIRMを呼び出す。割り
込みコントローラエミュレータIRMはカーネルKRに
対して仮想割込を要求し、再度キーボードエミュレータ
KEMが呼ばれてバッファDFに記憶されたキーコード
がアプリケーションプログラムAPPに渡される。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、エミュレーション装置
に関し、詳しくは少なくとも演算処理部、記憶部、入出
力部を備えたコンピュータである実行マシン上で、この
演算処理部が実行する命令セットについては互換性があ
りかつ実行マシンのアーキテクチャとは異なるアーキテ
クチャを備えたコンピュータであるターゲットマシン用
のプログラムを実行させるエミュレーション装置に関す
る。
【0002】
【従来の技術】従来、この種のエミュレーション装置と
しては、特開平5−46406号に開示されているよう
に、ターゲットマシンのOSファンクションコール、B
IOSファンクションコールやI/O命令、さらには割
り込みテーブルなどを、個々にエミュレーションするこ
とで、ターゲットマシン用に作られたアプリケーション
プログラムを実行マシン上で実行可能とする仮想計算機
エミュレーション装置が知られている。
【0003】こうしたエミュレーション装置では、特定
の中央演算処理部(以下、CPUという)に備えられた
機能を用い、エミュレーションを行なうべき命令が実行
されたり、エミュレーションを行なうべきアドレスやI
/Oがアクセスされた時、これをトラップして、ターゲ
ットマシン上でいかなる処理を実行しようとしているか
を解析し、同様の結果が実行マシン上で得られるよう、
予め用意した代替処理を実行するのである。例えば、タ
ーゲットマシンにおいて所定の機能が割り当てられたI
/Oアドレスをアクセスする命令が実行されようとした
場合には、これを特権命令の処理としてトラップし、い
かなる機能を実現しようとしているかを解析し、同様の
処理がなされるよう実行マシンのI/Oアドレスに対す
る書込処理を実行するのである。
【0004】
【発明が解決しようとする課題】しかしながら、従来の
エミュレーション装置では、あるターゲットマシンを実
行マシン上で完全にエミュレートすることは、エミュレ
ーションプログラムが巨大なものとなってしまうことか
ら、実際には実現困難であるという問題があった。した
がって、通常のエミュレーション装置では、OSが定義
しているファンクションコールと、多用されるI/Oア
クセス(例えばV−RAMへの直接アクセス)等を中心
に、ある程度の範囲をエミュレートしているに過ぎな
い。
【0005】また、エミュレーションを容易にするた
め、ディスクのアクセスや描画命令などの一連の処理か
らなる機能を単位としてエミュレートするのが一般的で
あり、この場合には、アプリケーションソフトウェア
が、各機能を構成する個々の処理を直接実行しようとす
ると、正常にエミュレートすることができないという問
題があった。
【0006】ターゲットマシンにせよ実行マシンにせ
よ、それらのアーキテクチャは、それらのマシンの開発
の歴史や開発時の制約などを背負っており、単純明快な
構成に終始することは期待し難い。細部に立ち入ると、
様々な例外や付加機能等を有しており、単純なエミュレ
ーションでは、到底対応できないのである。このため、
マシンを構成するあらゆる処理、機能について完全なエ
ミュレーションを実現しようとすると、エミュレーショ
ン装置の構成も複雑なものとなり、エミュレーション用
のプログラムも複雑化し巨大化するという問題があっ
た。
【0007】更に、コンピュータにおけるエミュレーシ
ョンは、結果の同一性が保たれれば足りるものではな
く、実行速度の同一性(少なくとも許容できる範囲での
同一さ)が必要となる場合も少なくない。例えば、ある
実行マシン上でワードプロセッサのプログラムを実行し
ているとして、文字列の置換などの処理が、ターゲット
マシン上で直接実行すれば数秒程度で完了するにもかか
わらず、実行マシン上でのエミュレーションによって数
分という時間が必要であるとすれば、置換結果が同一で
あるとしても、エミュレーションとしてはもはや同一と
呼ぶことは困難であろう。
【0008】本発明のエミュレーション装置は、こうし
た問題を解決し、あるターゲットマシンのアーキテクチ
ャの大部分を、他の実行マシン上でエミュレートするこ
とを目的としてなされ、次の構成を採った。
【0009】
【課題を解決するための手段】本発明の第1のエミュレ
ーション装置は、少なくとも演算処理部、記憶部、入出
力部を備えたコンピュータである実行マシン上で、該演
算処理部が実行する命令セットは互換性がありかつ該実
行マシンのアーキテクチャとは異なるアーキテクチャを
備えたコンピュータであるターゲットマシン用のプログ
ラムを実行させるエミュレーション装置であって、前記
ターゲットマシンの前記アーキテクチャから定まる機能
毎に、該機能と等価な処理を前記実行マシンに実行させ
る複数の実行モジュールと、エミュレーションの開始前
に、前記実行モジュールを組み込むと共に、該実行モジ
ュールを呼び出すための呼び出し用情報を登録する初期
化手段と、前記プログラムが前記実行マシン上で実行さ
れる際、該プログラムが少なくとも前記ターゲットマシ
ンに関わる処理に属するとき、これを検出する検出手段
と、該検出手段による検出がなされたとき、前記プログ
ラムが属する前記ターゲットマシンの機能を判別する判
別手段と、該判別された機能に応じて、該機能毎に用意
された実行モジュールを、前記登録された呼び出し用情
報を用いて呼び出す呼出手段とを備えたことを要旨とす
る。
【0010】また、本発明の第2のエミュレーション装
置は、少なくとも演算処理部、記憶部、入出力部を備え
たコンピュータである実行マシン上で、該演算処理部が
実行する命令セットは互換性がありかつ該実行マシンの
アーキテクチャとは異なるアーキテクチャを備えたコン
ピュータであるターゲットマシン用のプログラムを実行
させるエミュレーション装置であって、前記実行マシン
の前記演算処理部と前記入出力部とを接続するバスに介
装され、前記ターゲットマシン用の命令をそのまま実行
可能な演算処理部を有する制御回路と、前記実行マシン
のコンピュータが前記ターゲットマシンの入出力部を操
作する命令を発行したことを、前記バス上の信号から検
出する検出手段とを備え、前記制御回路には、前記ター
ゲットマシンの前記アーキテクチャから定まる機能毎
に、該機能と等価な処理を前記実行マシンに実行させる
複数の実行モジュールと、前記検出手段により、前記発
行された命令が前記ターゲットマシンの入出力部を操作
する命令であることが検出されたとき、該命令が属する
前記ターゲットマシンの機能を判別する判別手段と、該
判別された機能の応じて、該機能毎に用意された前記実
行モジュールを、呼び出す呼出手段とを備えたことを特
徴とする。
【0011】
【作用】以上のように構成された本発明の第1のエミュ
レーション装置は、実行マシンの立ち上げ時に、初期化
手段が、複数の実行モジュールを組み込むと共に、実行
モジュールを呼び出すための呼び出し用情報を登録す
る。処理が開始され、ターゲットマシン用のプログラム
が実行マシン上で実行されると、検出手段は、プログラ
ムが少なくともターゲットマシンに関わる処理に属する
とき、これを検出する。検出手段によるかかる検出がな
されたとき、判別手段が、プログラムが属するターゲッ
トマシンの機能を判別し、判別された機能に応じて、呼
出手段が、この機能毎に用意された実行モジュールを、
登録された呼び出し用情報を用いて呼び出す。ここで、
実行マシンとターゲットマシンは、アーキテクチャは異
なるが演算処理部が実行する命令セットは互換性があ
る。従って、ターゲットマシンに関わる処理に属さない
命令は、そのまま実行でき、ターゲットマシンに関わる
処理に属するものは、予め登録した呼び出し用情報を用
いて呼び出した実行モジュールにより、等価な処理とし
て実行する。
【0012】ここで、初期化手段が、実行モジュールを
呼び出すための呼び出し用情報の登録を、実行モジュー
ルに用意された所定の処理プログラムの実行に一旦処理
を移すことで、各実行モジュール自体に行なわせる構成
とすることもできる。実行モジュール自体が登録を行な
うことで、初期化手段は、どう言った呼び出し情報を登
録すべきかとか、どれだけの実行モジュールが登録され
るかといった情報を知る必要がない。
【0013】また、実行モジュールの少なくとも一つ
が、他の実行モジュールが登録した呼び出し用情報を記
憶しており、その実行モジュールの実行時に、この呼び
出し用情報を用いて、呼出手段を介して間接的に(しか
し検出手段や判別手段を呼び出すことなく)、他の実行
モジュールを呼び出すものとすることも、全体の実行速
度を向上する上で有用である。
【0014】更に、実行モジュールの少なくとも一つ
が、初期化手段による実行モジュールの組み込み時に、
この実行モジュールより先に組み込まれた他の実行モジ
ュールの内部に用意され該他の実行モジュールを構成す
る処理の少なくとも一つを直接呼び出す直接呼出用情報
を取得するものとしてもよい。この場合、後に組み込ま
れた実行モジュールは、その実行モジュールの実行時
に、取得した直接呼出用情報を用いて、この実行モジュ
ールにより先に組み込まれた他の実行モジュールを直接
呼び出すことが可能となる。先に組み込まれた他の実行
モジュールに、後に組み込まれる実行モジュールがその
内部に用意されこの実行モジュールを構成する処理の少
なくとも一つを直接呼び出す直接呼出情報を教えるもの
とすれば、先に組み込まれた実行モジュールが後で組み
込まれる実行モジュールを直接呼び出すことも、同様に
可能となる。
【0015】また、実行モジュールの少なくとも一つ
が、ターゲットマシンのハードウェア上の割込に伴う処
理と等価な処理を実行するモジュールであり、このモジ
ュールが直接呼出情報を教える他の実行モジュールが、
割込の発生自体を処理するモジュールである場合におい
て、この実行モジュールが、その登録時に、他の実行モ
ジュールに対して、割込を特定する情報を登録すること
も、割込の発生時の処理を容易なものとする上で好適で
ある。
【0016】実行モジュールは、すべてソフトウェアに
より構成することも可能であるが、少なくとも複数の実
行モジュールの一部の実行モジュールと呼出手段とを、
実行マシンに実装され、実行マシンの演算処理部とは異
なる演算処理部を備えたマシン上で実現することも、実
行速度を改善する上で好適である。
【0017】こうした実行モジュールの一つが、ターゲ
ットマシンのキーボードやマウスといった入出力装置と
間のデータの受け渡しと等価な処理を実行するモジュー
ルであり、このモジュールを、実行マシンのキーボード
等の入出力装置の動作に伴い呼び出されて、データを受
け渡すものと、データの受け渡し後に、ターゲットマシ
ンにおける受け渡しを模擬して生起された割込により呼
び出されて、先に受け渡したデータを、ターゲットマシ
ンにおける入出力装置のデータとして外部とやり取りす
る構成とし、このモジュールが、実行マシンの入出力装
置の動作に際して2度呼び出されるものとすれば、入出
力装置の機能をより一層正確に模擬することができる。
【0018】また、本発明の第2のエミュレーション装
置は、ターゲットマシン用の命令をそのまま実行可能な
演算処理部を有する制御回路を、実行マシンの演算処理
部と入出力部とを接続するバスに介装している。実行マ
シン上で処理が開始され、ターゲットマシンの入出力部
を操作する命令が実行マシンのコンピュータにより発行
されると、検出手段は、これを検出する。検出手段によ
るかかる検出がなされたとき、制御回路に設けられた判
別手段が、発行された命令が属するターゲットマシンの
機能を判別し、判別された機能に応じて、呼出手段が、
この機能毎に用意された実行モジュールを呼び出す。従
って、実質的なエミュレーションの処理は、実行マシン
においてハードウェアとして用意された制御回路により
実行される。即ち、実行マシンの演算処理部は、ターゲ
ットマシン用の命令の発行とこれと等価な機能の実行と
いう二つの処理を行なう必要がなく、エミュレーション
の速度は格段に改善される。
【0019】この第2のエミュレーション装置におい
て、前記検出手段が、前記実行マシンが発行した命令が
前記ターゲットマシンの入出力部を操作する命令である
ことを検出したとき、該実行マシンの前記演算処理部の
該命令の発行動作の完了を遅延する遅延手段と、呼出手
段による実行モジュールの呼び出しに伴い、該実行モジ
ュールが前記処理を完了したとき、前記遅延手段による
遅延を終了し、前記実行マシンのコンピュータの動作を
完了させる遅延終了手段とを備えれば、見かけ上実行マ
シンのコンピュータの動作毎にエミュレーションが完了
することになり、ターゲットマシンの動作を一層正確に
エミュレーションすることができる。
【0020】また、エミュレーションの開始前に、前記
実行モジュールを組み込むと共に、該実行モジュールを
呼び出すための呼び出し用情報を登録する初期化手段を
備えると共に、呼出手段は、実行モジュールを呼び出す
際、該初期化手段により登録された呼び出し用情報を用
いる登録参照手段を備えるものとすれば、実行モジュー
ルの呼出を簡略化することができる。
【0021】更に、制御回路に、実行マシンの立ち上げ
時に、この制御回路が動作可能な状態となるまでの間、
実行マシンのコンピュータに対してその動作を禁止する
禁止信号を出力する手段を備えるものとすれば、確実に
エミュレーションを行なうことができる。
【0022】制御回路に、この制御回路が介装されたバ
スの実行マシンの演算処理部側のバスと実行マシンの入
出力側のバスとの間でデータのやり取りを行なうため
に、バスの使用の要求を調停する調停手段を備えるもの
とすれば、両バスでのデータのやり取りを調整すること
ができ、処理を容易にすることができる。
【0023】制御回路に、ターゲットマシンに用いられ
ている演算処理部より動作速度が速い演算処理部を備え
るものとすれば、エミュレーションによるオーバーヘッ
ドによる全体的な動作速度の低下を補うことができ、好
適である。
【0024】
【実施例】以上説明した本発明の構成・作用を一層明ら
かにするために、以下本発明の好適な実施例について説
明する。図1は、第1本実施例のエミュレーション装置
の構成を概念的に示すブロック図である。このエミュレ
ーション装置は、実際には、PC−AT機と互換性を有
するDOS/V機(PC−ATおよびDOS/Vは、I
BM社の商標)を実行マシンとし、その上で、ターゲッ
トマシンであるPC−9800シリーズ(PC−980
0は日本電気株式会社の商標)のアーキテクチャを実現
するものである。図2は、DOS/V機の概略構成を示
すブロック図、図3は、そのメモリおよびI/Oマップ
を示す説明図である。
【0025】説明の便宜上、まず図2に従い、実行マシ
ンであるDOS/V機の構成について説明する。このD
OS/V機は、図示するように、ローカルバス22に接
続された演算処理部20、ローカルバス22を外部バス
の一つであるPCIバス32に接続するPCIブリッジ
30、PCIバス32を介して演算処理部20のCPU
21等によりアクセスを受けるコントローラ部40、各
種のI/O装置等を制御する機器が低速の外部バスであ
るISAバス42に接続されたI/O部60、および周
辺機器であるキーボード72,スピーカ74,CRT7
6などから構成されている。
【0026】演算処理部20は、中央演算処理装置とし
てのCPU21(本実施例ではインテル社製Penti
umを使用)、キャッシュメモリ23,そのキャッシュ
コントローラ24およびメインメモリ25から構成され
ている。PCIブリッジ30は、高速のPCIバス32
を制御する機能を備えたコントローラである。CPU2
1が扱うメモリ空間は、CPU21の内部に用意された
各種レジスタにより、実際の物理アドレスより広い論理
アドレスに拡張されている。
【0027】コントローラ部40は、モニタ(CRT)
76への画像の表示を司るグラフィックスコントローラ
(以下、VGAと呼ぶ)44、接続されるSCSI機器
とのデータ転送を司るSCSIコントローラ46、PC
Iバス32と下位のISAバスとのインタフェースを司
るPCI−ISAブリッジ48から構成されている。V
GA44は、CRT76に対して、640×480ドッ
ト、16色表示が可能である。なお、表示用のフォント
を記憶したキャラクタジェネレータや所定のコマンドを
受け取って所定の図形を描画するグラフィックコントロ
ーラ、さらには描画画像を記憶するビデオメモリ等は、
このVGA44に実装されているが、これらの構成は周
知のものなので、必要に応じて後述するものとし、図2
では省略した。
【0028】PCI−ISAブリッジ48を介して接続
されたISAバス42は、各種のI/O機器が接続され
る入出力制御用のバスであり、DMAコントローラ(以
下単にDMAと呼ぶ)50、リアルタイムクロック(R
TC)52、複合I/Oポート54、サウンドI/O5
6、キーボード72およびマウス73とのインタフェー
スを司るキーボードインタフェース(以下KEYと呼
ぶ)64、優先順位を有する割り込み制御を行なう割り
込みコントローラ(以下PICと呼ぶ)66、各種の時
間カウントやビープ音を発生するタイマ68等から構成
されている。なお、ISAバス42には、拡張ボードが
実装可能なISAスロット62が接続されている。
【0029】複合I/Oポート54には、パラレル出
力,シリアル出力の他、フロッピディスク装置82やハ
ードディスク84を制御する信号を入出力するポートが
用意されている。また、パラレル入出力には、パラレル
ポート86を介してプリンタ88が、シリアル入出力に
は、シリアルポート90を介してモデム92が、各々接
続されている。また、サウンドI/O56には、上述し
たスピーカ74の他、マイクロフォン96が接続可能と
されている。これらの構成の他、DOS/V機では、標
準化されたI/Oチャンネルが用意されることも多い
が、本実施例では図示および説明は省略する。
【0030】かかる構成を有するDOS/V機におい
て、PC−9800機のアーキテクチャを実現する手法
について、以下説明する。まず最初に、本実施例の実行
マシンであるDOS/V機のCPU21が有するメモリ
管理機能と、実行モードについて説明する。図3は、タ
スクが管理するアドレス空間と物理アドレスとの関係を
示す説明図である。また、図4は、リアルモード、保護
(プロテクト)モード、仮想8086モード間の関係を
示す説明図である。i80386(インテル社製)以上
のCPUでは、タスクが管理するアドレスを所定の物理
アドレスに割り当てタスク内では所定の論理アドレスで
処理を行なうことができる機能が備えられている。従っ
て、各々のタスクに処理が移行した場合には、そのタス
ク内で所定のアドレスをアクセスしても、他のタスクに
とっての同一アドレスには、何の影響も与えないのであ
る。
【0031】また、このCPU21は、リアルモード,
保護モード,仮想86モードの3つの動作モードを有す
る。リアルモードとは、このCPU21を高速の808
6として動作させるモードあり、MS−DOS(マイク
ロソフト社の商標)等を立ち上げる場合には、通常この
リアルモードで処理を開始する。また、保護モードは、
特権レベルを設定したリング保護の機能を用いた動作モ
ードであり、セグメント単位で特権レベルを設定するこ
とにより、特定の処理による直接アクセスからの保護を
実現する。例えば、アプリケーションプログラムの特権
レベルを最下位にしておくことで、システムとして規定
されたアドレス範囲やI/Oを直接アクセスできないも
のとすることが容易にでき、直接のアクセスが生じた場
合には、例外処理が起動されていわゆるトラップが生
じ、処理が特定のアドレスに移行するものとすることが
できる。更に仮想8086モードは、保護モードのまま
で8086のコードを直接実行可能とするモードであ
り、CPU21は、保護モードと同様に動作するが、ア
プリケーションプログラムにより指定されている論理番
地を8086と同様に解釈して実行する。
【0032】本実施例のDOS/V機に電源が投入され
ると、このDOS/V機は、ハードディスクのブートブ
ロックを読み出し、ハードディスク上のOS等を読み込
み可能とする。また、ROMで提供されているDOS/
V機のとしてのBIOSを主記憶上でアクセス可能な状
態とする(後述する図7符号A1)。DOS/V機のメ
モリマップおよびI/Oマップを図5に示す。その後、
本実施例における初期化手段である初期化処理ルーチン
が実行される。この処理ルーチンを図6に示す。また、
図6の初期化処理ルーチンの実行の様子を図7の説明図
に示す。以下、図6のフローチャートと図7の説明図を
参照しつつ、エミュレーション装置が初期化される様子
を説明する。
【0033】図6に示した初期化処理ルーチンが起動さ
れると、まず、エミュレーションプログラムのカーネル
をハードディスク58からロードする処理を行なう(ス
テップS100、図7符号A2)。カーネルとは、エミ
ュレーションを行なう処理の内、例外処理が起動された
際、その原因の解析を行ない、ディスパッチャと呼ばれ
る処理を介して実際にエミュレーションを行なう実行モ
ジュールを呼び出す一連の手続(検出手段および判別手
段に相当する処理)を言う。また、ディスパッチャと
は、エミュレーションを行なう処理のうち、呼出手段に
相当し、カーネルによる分析に基づいて実際にエミュレ
ーションを行なう実行モジュールを呼び出す一連の手続
をいう。このカーネルのロードに引き続き、カーネルを
その実行位置に転送し(ステップS110、図7符号A
3)、カーネルに処理を移行する(ステップS12
0)。従って、図6では一連の処理として示している
が、ステップS130以下は、カーネル自身の処理とな
る。
【0034】カーネルは、プロテクトモード用のいくつ
かのプログラムを転送し、CPU21の動作モードをプ
ロテクトモードに切り換えて、DOS/V用のメモリ空
間およびPC−9800用のメモリ空間を、それぞれ上
位のアドレスに確保する処理を行なう(ステップS13
0、図7符号A4)。このメモリ空間は、仮想的なDO
S/V用のタスクおよびPC−9800用のタスクに対
応しており、このメモリ空間を論理的には、00000
0Hから始まる1Mの主記憶として割り当てるのであ
る。次に、カーネルと共に動作するディスパッチャ(図
7符号A5)、更にエミュレーションを行なう各種の実
行モジュールを順次転送する処理を行なう(ステップS
140、図7符号A6)。この結果、先にアクセス可能
な状態にされた仮想DOS/VのBIOS関係のルーチ
ンの他、主記憶上には、エミュレーションのための実行
モジュールが配置される。
【0035】ステップS140で、メモリ上に順次ロー
ドされる実行モジュールは、所定の名称のファイルにテ
キストデータの形で書かれたリストに従って、ハードデ
ィスク84から読み出される。以下、実行モジュールの
配置に伴う初期化の処理について説明するが、先に実行
モジュールがすべてロードされた後の全体構成につい
て、図1を用いて説明する。カーネルKR,ディスパッ
チャDPおよび各実行モジュールがロードされ初期化さ
れると、図1に示すように、実施例のエミュレータ装置
が、このDOS/V機の上に実現されることになる。即
ち、このエミュレーション装置は、DOS/V機の上に
仮想的に用意されたPC−9800機と同一の環境上
(仮想PC上という)で実行されるプログラムAPPが
特権命令などを実行した場合、例外の発生とみなして呼
び出されるカーネルKR、カーネルKRにより特定され
た例外原因に基づいて呼び出され、この例外原因に基づ
いて、機能毎に用意された各実行モジュールを呼び出す
ディスパッチャDP、ディスパッチャDPから呼び出さ
れて各機能のエミュレーションを行なう各種実行モジュ
ールから構成されている。
【0036】実際にエミュレートを行なう実行モジュー
ルは、PC−9800機のハードウェアをその機能に基
づいて大まかに分割し、機能毎に用意されている。図1
には、主要なモジュールのみ示した。メモリエミュレー
タMEMは、主記憶やEMSの状態をエミュレートする
モジュールである。マウスエミュレータMUMは、DO
S/V機のマウス73の動きをPC−9800機のマウ
スとしてエミュレートするモジュールである。グラフィ
ックエミュレータGEMは、PC−9800機のグラフ
ィック画面をエミュレートするモジュールである。一
方、テキストエミュレータTEMは、文字コードにより
指定された文字の画像の取得をエミュレートする文字フ
ォントエミュレータCFMと一体となって動作するモジ
ュールであり、PC−9800機のテキスト画面をエミ
ュレートするものである。テキストエミュレータTEM
およびグラフィックエミュレータGEMによりエミュレ
ートされ、仮想的なPC−9800機の画像が作られた
後は、表示エミュレータDEMにより実際のCRT76
への画像の表示がエミュレートされる。
【0037】タイマエミュレータTIMは、DOS/V
機に内蔵されたタイマ68によりPC−9800機上の
タイマ関係の処理をエミュレートするモジュールであ
る。また、キーボードエミュレータKEMは、DOS/
V機のキーボード72およびKEY64により、PC−
9800機のキーボードからのキー入力をエミュレート
するモジュールである。
【0038】更に、割り込みコントローラエミュレータ
IRMは、DOS/V機の割り込み機能を用いて、PC
−9800機の割り込みをエミュレートするモジュール
である。この割り込みコントローラエミュレータIRM
は、割り込みという行為を介して多くのモジュールから
呼び出される関係にある。DOS/V機における割り込
み処理の回路を図8に示す。PC−9800機でも同様
であるが、割り込み要求は、多数のデバイスからPIC
66に出されるので、これをエミュレートする実行モジ
ュールにおいても、モジュール間で何らかのやりとりが
必要となる。なお、図8では図示の都合上、インタフェ
ース回路の一部を省略したが、専用のインタフェース回
路を介して割り込み要求が出されることは当然である。
例えばマウス73からの割り込み要求は、直接出力され
ている訳ではなく、インタフェース回路であるKEY6
4を介して出力されている。
【0039】DOS/V機における現実のハードウェア
割り込みは、特権命令の実行や書込保護が指定された範
囲の書込等と共に、カーネルKRに処理を移す例外処理
の一つとして扱われている。また、ハードウェア割り込
みに起因して、あるいは各モジュール内部の処理に起因
して割り込みコントローラエミュレータIRMがPC−
9800機の動作をエミュレートするために起こす割り
込みは、仮想割り込みの発生としてカーネルKRを呼び
出す要因とされている。割り込みコントローラエミュレ
ータIRMの呼び出しの詳細については、後述する。
【0040】これらの各種実行モジュールは、初期化の
処理において、カーネルKRにより、ハードディスク8
4から読み出され、メモリ上に配置される。各実行モジ
ュールは、初期化の処理においてメモリ上に配置される
度に、実行モジュールに予め用意した組み込み処理を一
度実行する。このとき実行モジュールが行なう処理の一
例を図9ないし図11のフローチャートに示した。ま
た、図9の処理が行なわれる様子を図12の説明図に示
した。以下、これの図面を用いて、実行モジュールの組
み込み時の処理について説明する。
【0041】実行モジュール(例えば図12実行モジュ
ールDM1)の組み込み処理に移行すると、まず、ディ
スパッチャDPが所定のメモリエリアに用意したディス
パッチャテーブルDTを検索し(ステップS200)、
その空き領域にモジュール名(英数字8文字)TM1と
その呼出アドレスA1を登録する処理を行なう(ステッ
プS210)。なお、これらの検索および登録の処理
は、実際には、図12に示したように、カーネルKRお
よびディスパッチャDPの機能を利用して行なわれる。
即ち、カーネルKRが各実行モジュールDMからのサー
ビスを受け付けるアドレスAAは、固定アドレスとして
用意されており、各実行モジュールDMは、このアドレ
スAAを呼んで、モジュール名(文字列)TMとその呼
出アドレスAの登録を依頼する(図12、符号B1)。
すると、カーネルKRは、ディスパッチャDPの呼出ア
ドレスを、予めディスパッチャDP自身が登録したテー
ブルを参照して取得し、このアドレスADを利用して、
ディスパッチャDPに登録のサービスを要求する。この
要求を受けて、ディスパッチャDPがディスパッチャテ
ーブルDTに、そのモジュールの名称(文字列)TMと
呼出アドレスAとを登録するのである(図12、符号B
2)。
【0042】カーネルKRの固定アドレスAAを介して
ディスパッチャDPに各種のサービスを要求する上記手
法は、実行モジュールの一つが他のモジュールを呼び出
す場合や後述する直接呼出のエントリポイントEPを通
信相手のモジュールとの間で登録し合う場合などにも用
いられる。例えば、一つの実行モジュールが他の実行モ
ジュールを呼び出す場合には、実行モジュールの呼び出
しというサービスを、カーネルKRの固定アドレスAA
を介してディスパッチャDPに依頼する。ディスパッチ
ャDPは、ディスパッチャテーブルDTを参照して呼び
出そうとするモジュールの呼び出しアドレスを容易に取
得し、そのモジュールを呼び出すことができるのである
(図12、符号B3)。従って、カーネルKR,ディス
パッチャテーブルDTおよび各種実行モジュールを通じ
て予め固定的に管理する必要があるのは、カーネルKR
の固定アドレスAAのみであり、管理が極めて容易とな
るという利点がある。
【0043】次に、その実行モジュールDM1にモジュ
ール間通信を行なうとの登録がなされているか否かを判
断する(ステップS220)。実行モジュールは、登録
ファイルの内容に従って順次登録されるが、例えば第n
番目の実行モジュールDMnが同様に起動され、自己の
モジュール名TMnの登録と呼出アドレスAnの登録を
済ませた後(図12符号B2)、モジュール間通信が有
るとの判断がなされると(ステップS220)、実行モ
ジュールDMn内に用意されている直接呼出用のエント
リポイントEPをパラメータとして用意する処理を行な
う(ステップS230)。このエントリポイントEP
は、モジュール間通信の対象となる実行モジュールに教
える直接呼出用のアドレスであり、教えるエントリポイ
ントがなければ0個のエントリポイントEPを用意し、
複数個あればその数のエントリポイントEPを用意する
のである。エミュレーションの高速性を確保しようとす
ると、緊密な関係を有するモジュール間では、呼出アド
レスAnを利用したモジュール全体の呼出に代えて、そ
のモジュールが実現する機能の一部をなす処理そのもの
を直接呼び出したい場合が存在する。こうした場合に
は、各実行モジュールが対象となるモジュールにエント
リポイントEPを教えておく必要がある。
【0044】エントリポイントEPを用意した後、次に
割り込みの登録が有るか否かを判断し(ステップS24
0)、割り込みの登録がある場合には、登録する割り込
み番号を用意する処理を行なう(ステップS250)。
組み込み中の実行モジュールが割り込みを利用するもの
である場合には、その割り込みの番号を割り込みをエミ
ュレートするモジュールである割り込みコントローラエ
ミュレータIRMに予め登録しておく必要があるため、
その番号を用意するのである。以上の処理の後、通信対
象となる実行モジュールの呼び出しを、カーネルKRを
介してディスパッチャDPに依頼する(ステップS26
0、図13符号C1)。この時、実行モジュールは、呼
出先のモジュールをその名称(文字列)で指定し、用意
した直接呼出用のエントリポイントEPや割り込みの登
録番号等をディスパッチャDPにパラメータとして引き
渡す。
【0045】この依頼を受けたディスパッチャDPは、
図10に示すディスパッチャ呼出ルーチンを実行する。
ディスパッチャDPは、呼び出すべきモジュールの名称
(文字列)を受け取っているから、ディスパッチャテー
ブルDTをこの文字列で検索し(ステップS300、図
13符号C2)、呼出アドレスを取得してそのモジュー
ルを呼び出す処理を行なう(ステップS310、図13
符号C3)。この時、ディスパッチャDPは、呼出元の
モジュールから受け取ったパラメータを呼び出したモジ
ュールに引き渡す。
【0046】こうしてディスパッチャDPから呼ばれる
ことにより、通信対象となるべき実行モジュールが呼び
出され、その実行モジュールは、図11に示したエント
リポイントを取得する処理を実行する。この処理が開始
されると、まず呼び出したモジュールが何であるかの判
別を行なう(ステップS320)。呼び出した実行モジ
ュールがパラメータとして直接呼出のためのエントリポ
イントEPを用意している場合には、これを判別し(ス
テップS330)、直接呼出用のエントリポイントEP
を登録する処理を行なう(ステップS340)。
【0047】次に、図11の処理を実行するモジュール
が割り込みコントローラエミュレータIRMの場合に
は、割込の登録があるかを判別する(ステップS35
0)。割込番号の登録がある場合には、パラメータの一
部として受け取った割込番号を登録すると共に、割込に
よる直接呼び出しを行なう場合のエントリポイントEP
を割り込む側のモジュールに教えるために準備する処理
を行なう(ステップS360)。なお、割込番号の登録
の処理を行なうモジュールは、割り込みコントローラエ
ミュレータIRMに限られるから、それ以外のモジュー
ルで図11の処理がなされる場合には、ステップS35
0,S360の処理は行なわれない。
【0048】割込の登録に関する処理に続いて、呼び出
した側のモジュールが、割込の呼出のためのエントリポ
イントEP以外に直接呼出の教示を行なうべきエントリ
ポイントEPが存在するモジュールであるか否かの判別
を行なう(ステップS370)。直接呼出のエントリポ
イントEPを呼び出した側のモジュールに教える必要が
あると判断された場合には、教示する直接呼出のエント
リポイントEPを、返し値のパラメータとして用意する
処理を行なう(ステップS380)。以上の処理の後、
「RTN」に抜けて本ルーチンを終了する。この結果、
処理は、いったんディスパッチャDPを介して(図13
符号C4)、呼び出した側の実行モジュールに戻る(図
13符号C5)。この際、呼び出された側の実行モジュ
ールが返し値として用意したパラメータが存在すれば、
このパラメータは、呼び出した側の実行モジュールに渡
され、呼び出した側の実行モジュールは、これをエント
リポイントEPとして登録する。
【0049】以上の処理を組み込みを行なう最終の実行
モジュールまで繰り返すことにより、初期化の処理は完
了する。その後、仮想86モードに実行モードを切り換
え、PC−9800機としてそのOSであるMS−DO
Sをブートする処理を開始する。具体的には、MSDO
S.SYS、IO.SYS等のシステムファイルを読み
込む処理や、COMMAND.COMを組み込む処理、
更にはCONFIG.SYSに登録されているデバイス
ドライバを組み込む処理などを行なう。これらの処理
は、通常のMS−DOSの組み込み処理と同一であり、
CPUは仮想86モードに切り換えられているので、P
C−9800機がMS−DOSを組み込む処理と何等相
違しない。なお、DOS/V機がそのオリジナルな状態
でMS−DOSを立ち上げるときも、MSDOS.SY
S等同一名称のファイルを読み込むが、これらのファイ
ルはその内容が当然異なる。これらのファイルは一般に
ルートディレクトリに置くことが決められているので、
異なる内容で同一名称のファイルを複数個置くことはで
きない。従って、エミュレーションを開始する以前に専
用のアプリケーションプログラムを実行させ、一方のマ
シン用のMSDOS.SYS等のファイルの名称を変更
しておくのである。
【0050】実行モジュールは、その組み込み時に少な
くとも自己のモジュール名(文字列)TMと呼出アドレ
スAをディスパッチャテーブルDTに登録することが必
要であるが、メモリを使用する実行モジュールの場合に
は、更に必要な実メモリをPC−9800機用に確保し
た仮想メモリ(98用メモリ空間)に割り当てる処理を
行なう。
【0051】以上の処理により、実行マシン(実施例で
はDOS/V機)上でターゲットマシン(実施例ではP
C−9800機)をエミュレートする環境が整えられ
た。そこで、次に図1を参照しつつ、実際にエミュレー
ションが行なわれる様子を大まかに説明し、更に実行モ
ジュールがどのように処理を行なうかについて、例を挙
げて詳述する。
【0052】初期化の処理が終了してPC−9800用
の各種システムファイルが読み込まれ、MS−DOSが
起動されると、CRT76には、「A:」などのプロン
プトが表示された状態となる。この状態では、MS−D
OSが動作していることになるが、所定のアプリケーシ
ョンを起動しようとして、その実行ファイル名をキーボ
ード72から入力する際にも、キーボードのエミュレー
ションが実行されるのである。即ち、図1に示した「仮
想PC上のプログラム」とは、アプリケーションプログ
ラムのみならずDOSを含めたあらゆるプログラムであ
る。この時、DOS/V機は、プロテクトモードで動作
しており、CPU21に備わったリング保護機能は、特
権レベル3とされている。この状態で、仮想的に用意さ
れた98用メモリ空間にアプリケーションプログラムA
PPがロードされ、仮想PC上でアプリケーションプロ
グラムが実行されている状態を取り上げてエミュレーシ
ョン装置の働きについて説明する。
【0053】エミュレーションの処理が起動されるには
次の5つの要因がある。 ページフォールト(メモリが割り当てられていない領
域に対するアクセス) 一般保護例外(特権命令の実行、I/Oの読み書き、
書込保護されたメモリに対する書込命令の実行、設定さ
れたアドレス範囲外に対するアクセスなど) エラー(0除算など) ハード割り込み これらの要因が生じると、カーネルKRが起動される。
この時、各レジスタの値などはすべて保存されているか
ら、カーネルKRは、自己が起動された原因を調べるこ
とができる。その結果、アクセスされたアドレスやI/
Oが何か、あるいは生じたハード割り込みがいかなる機
能に対応しているかを判断し、ディスパッチャDPを呼
び出す。ディスパッチャDPを呼び出すアドレスは、図
12に示したように、初期化の処理において登録されて
いるから、カーネルKRは、この呼出アドレスADによ
りディスパッチャDPを呼び出すことができる。なお、
カーネルKRに処理が渡った以降は、特権レベルは0に
設定される。
【0054】ディスパッチャDPは、カーネルKRから
受け取った情報を元にして呼び出す実行モジュールを特
定し、その呼出アドレスをディスパッチャテーブルDT
から取得する。ディスパッチャDPは、この呼出アドレ
スを用いて、各実行モジュールを呼び出すのである。図
1には、実行モジュールとして、既述したように、 ・メモリエミュレータMEM ・マウスエミュレータMUM ・グラフィックエミュレータGEM ・テキストエミュレータTEM ・文字フォントエミュレータCFM ・表示エミュレータDEM ・タイマエミュレータTIM ・キーボードエミュレータKEM ・割り込みコントローラエミュレータIRM を示したが、これ以外にも、プリンタやRS−232C
によるシリアル通信を司るのエミュレータなど、各種の
実行モジュールが存在する。
【0055】ハードウェア割り込みが発生したり、アプ
リケーションプログラムAPPが特権命令を実行したり
すると、カーネルKRに処理が移行し、カーネルKR
は、特権命令の中身やハードウェア割り込みの詳細を検
討し、ディスパッチャDPを呼び出す。ディスパッチャ
DPは、エミュレートすべき内容をカーネルKRからに
受け取り、ディスパッチャテーブルDTを参照して必要
な実行モジュールをその呼出アドレスAを用いて呼び出
す。呼び出された実行モジュールは、自分だけで総ての
処理が実行できる場合には、そのまま実行し、他の実行
モジュールの処理を必要とする場合は、初期化の処理に
おいて予め得ておいたエントリポイントEPを用いて、
実行モジュールを直接呼び出す。これをモジュール間通
信と呼ぶ。
【0056】図14は、通常の実行モジュールの呼び出
しとモジュール間通信とを例示した説明図である。図1
4に示した例では、実行モジュールDM2,DM3,D
M5の間でモジュール間通信が行なわれるものとした。
図示するように、ディスパッチャDPから呼び出される
場合には、その呼出アドレスA2,A3,A5など、モ
ジュール全体の開始アドレスが呼ばれることになるが、
モジュール間通信の場合には、初期化の処理において一
方的にあるいは相互に教示・取得したエントリポイント
EPを利用して、各実行モジュール内の処理から必要に
応じて、直接他のモジュールの内部処理を呼ぶことにな
る。例えば、実行モジュールDM5の内部処理におい
て、実行モジュールDM2の内部処理を直接実行する必
要が生じた場合には、エントリポイントEP21を参照
し、直接実行モジュールDM2内部の処理が呼び出さ
れ、実行される(符号C21)。ディスパッチャDPを
介して他の実行モジュールを呼び出す手法でも、呼び出
すモジュールが必要とするサービスを示すパラメータを
渡すことができれば、他の実行モジュールが用意してい
る処理を個々に利用すること自体は可能であるが、ディ
スパッチャDPに対するサービスの要求、ディスパッチ
ャDPによるディスパッチャテーブルDTの検索、呼出
アドレスAによる呼び出しといった手続が必要になって
しまう。これに較べて、モジュール間通信は、必要な処
理を直接呼び出すから、極めて高速に必要な処理を実行
できるという利点がある。
【0057】各実行モジュールDMにより、アプリケー
ションプログラムAPPが実行しようとした処理をエミ
ュレートした後、順次処理を復帰し、カーネルKRから
アプリケーションプログラムAPPに復帰する。なお、
ハードウェア割り込みにより割り込みコントローラエミ
ュレータIRMが呼ばれた場合や、他の実行モジュール
の処理から割り込みコントローラエミュレータIRMが
呼ばれた場合には、割り込みコントローラエミュレータ
IRMは、PC−9800機における割込の発生をエミ
ュレートするため、カーネルKRに対して仮想割り込み
を発生する。この仮想割り込みによりカーネルKRが呼
び出され、カーネルKRは、この仮想割り込みを判断し
て必要な実行モジュールを再度呼び出したり、場合によ
ってはアプリケーションプログラムAPPに復帰する。
【0058】次に、実際にDOS/V機上で行なわれる
PC−9800機の各機能のエミュレーションの一例と
して、キーボード72からの入力のエミュレーションを
詳しく説明する。DOS/V機のキーボード72および
そのインタフェースであるKEY64の構成を図15に
示す。他方、PC−9800機の回路は、図16に示す
通りである。両図から見て取れるように、DOS/V機
では、1チップマイクロコンピュータがキーマトリクス
を読み取って、そのデータをKEY64側にクロックに
同期した同期通信により、CPU21側とやり取りする
構成であるのに対して、PC−9800機では、キーマ
トリクスを1チップマイクロコンピュータで読み取っ
て、本体側に同期通信する構成を採っている。また、図
示しないが、キーボード72そのもののキーの数なども
異なっており、更に、同じキーを押し続けた場合のキー
コードの発生などのメカニズムも異なっている。
【0059】図17,図18は、キーボード72からの
入力をPC−9800機におけるキーボードからの入力
としてエミュレートする様子を示す説明図である。図
は、上方からDOS/V機のハードウェア、エミュレー
ションの実行部、仮想98の各層に分けて描いてある。
仮想98とは、PC−9800機用に仮想的に用意され
たメモリ空間であって、タスク自身としては、あたかも
MS−DOSが用意するPC−9800機の実空間で処
理を行なっているように処理を実行できる空間を意味し
ている。但し、この時点でCPU21はプロテクトモー
ドで動作しているので、仮想98においてアプリケーシ
ョンプログラムAPPが特権命令などを実行しようとす
ると、直ちに例外処理として、タスクは切り換えられ、
カーネルKRの処理に移行するのである。
【0060】アプリケーションプログラムAPPの実行
中にキーボード72のキーが操作されると、キーボード
72からのキーコードがバッファBFに蓄えられ(図1
7符号D1)、同時にハードウェア上の割込が生じる
(INT 09)。この割込要求は、直ちに処理をカー
ネルKRに移行させる(符号D2)。カーネルKRは、
既述したように、ハードウェアの割込を解析してディス
パッチャDPに処理を渡し(符号D3)、ディスパッチ
ャDPは、初期化の処理において登録された呼出アドレ
スを用いてキーボードエミュレータKEMを呼び出す。
【0061】キーボードエミュレータKEMは、バッフ
ァBFに保存されたキーコードを読み出し、このキーコ
ードが、PC−9800機のキーコードに変換可能なも
のか否かを判断をする。両者は完全に一対一に対応して
いるものではなく、特にDOS/V機では、2つ目のキ
ーコードが与えられて初めて一意に決まるものが存在す
る。従って、こうしたキーコードの場合には、PC−9
800機としてのキーコードの生成は行なわず、そのま
まディスパッチャDP,カーネルKRを介して、キーボ
ード72からの割込が生じた状態に復帰する(符号D
8)。他方、PC−9800機としてのキーコードが発
生可能と判断すると、キーボードエミュレータKEM
は、変換したキーコードを自分が管理するバッファDF
に記憶し(符号D5)、続いてモジュール間通信により
割り込みコントローラエミュレータIRMを直接呼び出
す処理を行なう(符号D6)。
【0062】図9ないし図14を用いて詳述したよう
に、本実施例では、各実行モジュールは、初期化の処理
における組み込み時に、モジュール間通信を行なう相手
のエントリポイントEPを取得している。キーボードエ
ミュレータKEMも、割り込みコントローラエミュレー
タIRMを直接呼び出すエントリポイントEPを取得し
ており、更に割込番号の登録も済ませている。そこで、
キーボードエミュレータKEMから、直接割り込みコン
トローラエミュレータIRMを呼び出し、割込のキーボ
ード72からの割込の発生を、割り込みコントローラエ
ミュレータIRMに渡す。
【0063】割り込みコントローラエミュレータIRM
は、このモジュール間通信を受けて、割込の内容を分析
し、カーネルKRに対して必要な仮想割込を起こす(符
号D7)。カーネルKRはこの仮想的な割込要求を受け
付け、これを解析し、アプリケーションプログラムAP
Pがキーボード72からのキー入力を割込処理により受
け付けるものであれば、ジャンプテーブルJTを参照し
(符号D8)、PC−9800機がキーボード72から
の割込を受け付けたときにジャンプする先を取得して、
必要な処理ルーチンに移行する(符号D9)。アプリケ
ーションプログラムAPPが、キーボード72からの割
込要求によってではなく、自分で定期的にキー入力を見
に行くタイプのものであれば、処理は一旦アプリケーシ
ョンプログラムAPPのレベルに戻される(符号D1
0)。この場合には、所定時間毎に、キーボード72か
らのキーコードを読み取るルーチンが呼ばれることにな
る(符号D11)。なお、この時点で、CPU21の特
権レベルは3に戻される。
【0064】こうして仮想98上でキーコードを読み取
る処理が呼ばれた以降の処理について、図18を参照し
て説明する。キーコードを読み取る処理は、PC−98
00機の所定のI/Oアドレスに割り当てられたキーデ
ータを読み取るI/O命令を実行する。このI/O命令
は、特権命令の実行に当たり、特権レベル3では例外処
理としてトラップされ、処理はカーネルKRに移行する
(図18符号E1)。カーネルKRは、この例外処理の
内容を解析し、ディスパッチャDPを介してキーボード
エミュレータKEMを呼び出す(符号E2)。キーボー
ドエミュレータKEMは、呼び出された際のパラメータ
を認識することにより、割込要求に伴う処理かI/Oに
対する読み出しに伴う処理かを判別し、バッファDFの
内容を読み取る処理を行なう(符号E3)。バッファD
Fは、先にキーボードエミュレータKEMが書き込んだ
PC−9800機としてのキーコードを保持しているか
ら、これを同じキーボードエミュレータKEMが読み取
ることは容易である。
【0065】ハードウェア割込による処理ではないの
で、キーボードエミュレータKEMは、ディスパッチャ
DPを介してカーネルKRへと処理を戻し、更に例外処
理を引き起こした処理まで戻って行く(符号E4)。こ
の結果、キーボード72からのキーデータを入力するP
C−9800機上の処理がなされ、そのデータはアプリ
ケーションプログラムAPPに渡されることになる。仮
想98上に展開されたPC−9800機用のアプリケー
ションプログラムAPPは、PC−9800機のキーボ
ード72からのキー入力があった場合と同一の動作を継
続することになる。即ち、実施例のエミュレーション装
置は、完全にPC−9800機のハードウェアとその動
作をエミュレートするのである。
【0066】以上、キーボード72からの入力を例に採
って、本実施例のエミュレーション装置の構成と働きに
ついて説明したが、他の実行モジュールもほぼ同様に動
作する。例えば、マウス73の動作をエミュレートする
マウスエミュレータMUMは、次のように構成されてい
る。PC−9800機のマウスは、所定のインターバル
で割込を発生し、CPUに対しては原点位置からの絶対
値をデータとして渡すのに対して、DOS/V機のマウ
ス73は、マウス73が動いた場合に割込を発生し、し
かも前回の位置からの差分のデータ(△x,△y)およ
びマウスボタンのオン・オフの情報からなるデータを引
き渡すという違いがある。そこで、これをエミュレート
するマウスエミュレータMUMは、マウス73が動いた
時に発生するハードウェア割込により一度呼ばれ、読み
取った差分のデータ(△x,△y)および前回のマウス
の位置から現在のマウスの絶対的な位置を演算し、これ
を所定のバッファに記憶しておく。加えて、マウスエミ
ュレータMUMは、予めタイマエミュレータTIMに対
して所定時間毎に割込を発生するように依頼しておく。
タイマエミュレータTIMから所定のインターバルで割
り込みコントローラエミュレータIRMに対して割込が
生じ、この割込を受け付けた割り込みコントローラエミ
ュレータIRMは、これをPC−9800機のマウスの
ための割込と認識してカーネルKRに対して仮想割込を
発生する。この仮想割込によりカーネルKRはMUMを
再度呼び出す。マウスエミュレータMUMは、この呼び
出しに応じて先に計算しておいたマウスの絶対的な位置
をバッファから読み出し、これを返す。この結果、アプ
リケーションプログラムAPPは、所定のインターバル
でマウスからの絶対位置のデータを受け取ることができ
る。
【0067】以上例示したキーボードエミュレータKE
MやマウスエミュレータMUMは、いずれはハードウェ
ア割込を利用するものであるが、割込を利用しないモジ
ュールでは、例外処理の発生→カーネルKRからディス
パッチャDPを介した実行モジュールの呼び出し→各実
行モジュールでのエミュレート(必要ならモジュール間
通信)→処理後のパラメータを持ってアプリケーション
プログラムAPPに復帰、という手順で処理がなされる
ことになる。
【0068】以上説明した本実施例のエミュレーション
装置によれば、実行マシン上でターゲットマシンをエミ
ュレーションするプログラムが、カーネルKR、ディス
パッチャDP、各実行モジュールと階層化されており、
極めて見通しの良い構成となっいる。従って、膨大な機
能をエミュレートする膨大なプログラムを効率よく開発
することができる。しかも、各実行モジュールはハード
ウェアの機能に近いところでモジュール化されているの
で、ハードウェアに直接アクセスするようなアプリケー
ションプログラムAPPであっても、エミュレーション
を正しく行なうことができる。例えば、詳しく説明した
キーボードのエミュレーションでは、キーボードエミュ
レータKEMは、キーボード72からの入力がなされた
とき、これをアプリケーションプログラムAPPに渡す
までに2度呼び出されている。即ち、キーボード72か
らの入力全体を一括してエミュレートしてしまうのでは
なく、一旦仮想的な割込を発生させることで、PC−9
800機においてキーボードからの入力に伴う割込が発
生する過程をもエミュレーションしているのである。こ
の結果、アプリケーションプログラムAPPがBIOS
を利用してキーボードから文字列を取得するものから、
アプリケーションプログラムAPP自体がキーコードを
解析して処理を行なっているものまで、あらゆるタイプ
の処理に対してエミュレーションを正しく機能させるこ
とが可能となっている。この結果、エミュレーションに
よる互換性は一層高められる。
【0069】かかるモジュール構造を採用すると、通常
は、モジュールの数が増えて、その管理が煩雑となって
しまうが、本実施例では、初期化の処理の中で、実行モ
ジュール自身がその組み込みの時点で自己のモジュール
名と呼出アドレスをディスパッチャテーブルDTに登録
するので、多数のモジュールの管理、変更や更新が極め
て容易となっている。ディスパッチャテーブルの割当も
固定的なものではなく、登録順に適宜登録して行くの
で、新たな実行モジュールが用意されたり、登録の順序
を変更した場合も何等特別な処置を行なう必要がない。
【0070】また、一つの機能を複数のモジュールによ
り実現する構造を採用すると、モジュール間の呼出のオ
ーバーヘッドが生じるから、通常はエミュレーションに
長大な時間を要することになり、エミュレーションで動
作するアプリケーションプログラムAPPの全体的な実
行速度が低下して実用に耐えなくなるおそれが生じる。
本実施例では、各実行モジュールの通常の呼出に加え
て、各実行モジュールは、モジュール間通信により、直
接他のモジュールの処理を呼び出すことが可能となって
いる。従って、複数の実行モジュールをディスパッチャ
DPを介して何度も呼び出すことがない。このように、
モジュール間通信により直接処理を実行させる結果、実
行モジュールの呼び出しに伴うオーバーヘッドの発生を
低減でき、高速なエミュレーションを実現している。し
かも、モジュール間通信を行なうためのエントリポイン
トEPは、組み込み時に、モジュール間通信を行なうモ
ジュール間で受け渡している。従って、複数のモジュー
ルがかかわる機能であってもその実行が高速である上、
各モジュールでのエントリポイントEPの管理が容易で
あるという利点も得られる。更に、自分より先に組み込
まれた実行モジュールのエントリポイントEPを取得す
るだけでなく、先に組み込まれたモジュールに後から組
み込まれるモジュールのエントリポイントEPを教えて
おくこともできるので、組み込みの順序に関係なくモジ
ュール間の呼び出しを行なうことができる。
【0071】更に、本実施例では、割込の処理を要する
実行モジュールは、割込の番号を予め割り込みコントロ
ーラエミュレータIRMに通知しておくので、割込のし
とはし発生の通知に対して、迅速にその要因を特定で
き、割り込みコントローラエミュレータIRMが必要な
処理を行なうことができる。
【0072】以上本発明の実施例について説明したが、
次に、上記エミュレーション装置の一部をハードウェア
による構成に置き換えた第2の実施例について説明す
る。第2実施例のエミュレーション装置は、図19に示
すように、第1実施例のPCIブリッジ430が直接P
CIバスを制御していたのに対して、PCIブリッジ4
30と実際のPCIバス432との間にエミュレーショ
ン用制御回路500を有する点で相違する。なお、この
エミュレーション用制御回路500以外の各部の構成で
あって、第1実施例と同一のものは、その下2桁の数字
を図2に示したものと同一としてある。従って、これら
の部材については、特に説明しない。
【0073】エミュレーション用制御回路500は、そ
の内部に、エミュレーションのための処理を行なうサブ
CPU510、エミュレーション用のプログラムを記憶
したROM520、ワークエリアを提供するRAM52
2を備える。また、エミュレーション用制御回路500
には、コネクタ530を介してPCIブリッジ430に
接続されたホストCPU側インタフェース532や、コ
ネクタ534を介してPCIバス432に接続されたI
/O側インタフェース536、エミュレーション用制御
回路500内の各部にタイミング信号を出力するコント
ロール回路540なども内蔵されている。なお、この実
施例で採用したサブCPU510は、メインCPU42
1と同等またはメインCPU421より高速に動作可能
なプロセッサである。もとより、メインCPU421よ
り低速のプロセッサを使用することも差し支えない。
【0074】エミュレーション用制御回路500の内部
構成の詳細を図20に示す。図示するように、エミュレ
ーション用制御回路500のサブCPU510,ROM
520,RAM522,CPU側インタフェース53
2,バス側インタフェース536,コントロール回路5
40は、内部バス542により相互に接続されている。
ホストCPU側インタフェース532は、ローカルバス
422側とエミュレーション用制御回路500側とのイ
ンタフェースを取る回路であり、その内部には、ホスト
側PCIインタフェース(以下、HOSTPCIIFと
呼ぶ)550、内部バス542側とのインタフェースと
なるI/Oポート555が備えられている。また、I/
O側インタフェース536は、PCIバス432側とエ
ミュレーション用制御回路500側とのインタフェース
を取る回路であり、その内部には、ホストCPU側イン
タフェース532同様、I/O側PCIバスインタフェ
ース(以下、I/OPCIIFと呼ぶ)560と、内部
バス542側とのインタフェースとなるI/Oポート5
65が備えられている。
【0075】HOSTPCIIF550は、更にその内
部に、ホストCPU側PCIバスおよびI/O側PCI
バス432側のアドレス信号をラッチするアドレスラッ
チ552、同じく両PCIバス上のデータをラッチする
データラッチ553、読み書きのタイミングを制御する
タイミング制御部554を有する。また、I/Oポート
555には、データの読み出しを司る読出部557、デ
ータの書き込みを司る書込部559が備えられている。
なお、HOSTPCIIF550からは、コントロール
回路540にタイミング信号が出力されている。
【0076】他方、I/OPCIIF560は、更にそ
の内部に、ホストCPU側PCIバスおよびI/O側P
CIバス432側のアドレス信号をラッチするアドレス
ラッチ562、同じく両PCIバス上のデータをラッチ
するデータラッチ563、読み書きのタイミングを制御
するタイミング制御部564を有する。また、I/Oポ
ート565には、データの読み出しを司る読出部56
7、データの書き込みを司る書込部569が備えられて
いる。なお、I/OPCIIF560からは、コントロ
ール回路540にタイミング信号が出力されている。
【0077】ホストCPU側インタフェース532のH
OSTPCIIF550に用意されたアドレスラッチ5
52とI/O側インタフェース536に用意されたアド
レスラッチ562とは、両PCIバス上のアドレス信号
の同期を取るために、制御信号をやり取りしている。ま
た、両データラッチ553,563および両タイミング
制御部554,564も同様である。更に、ホストCP
U側PCIバス側からのアクセスを読み取るために、H
OSTPCIIF550のアドレスラッチ552,デー
タラッチ553,タイミング制御部554から、アドレ
ス,データおよび制御信号の各信号線がI/Oポート5
55の読出部557に接続されている。他方、ホストC
PU側PCIバスにデータを出力するために、I/Oポ
ート555の書込部559を介して、サブCPU510
側からのデータが、データラッチ553に入力されるよ
う信号線が接続されている。
【0078】I/O側インタフェース536では、I/
Oポート565の読出部567とI/OPCIIF56
0のアドレスラッチ562とがアドレス信号線により接
続されており、読出部567とデータラッチ563とが
データ信号線により、書込部569とデータラッチ56
3がデータ信号線により、それぞれ接続されている。従
って、サブCPU510側から、I/O側PCIバス4
32に対して、アドレス,データが出力可能である。
【0079】コントロール回路540は、ホストCPU
側PCIバスとI/O側PCIバス432と間の調停を
行なうバスアービタ544、サブCPU510を制御す
るCPU制御回路545、ROM520,RAM522
等のメモリを制御するメモリ制御回路547、その他の
制御を行なう各種制御回路549から構成されている。
バスアービタ544は、両バス間の調停を取るものであ
り、I/O側に用意されたDMA450により、DMA
転送の要求がなされた場合、DMA転送用にバスを開放
する制御に用いられる。CPU制御回路545は、HO
STPCIIF550もしくはI/OPCIIF560
からの要求に応じて、サブCPU510に対する割り込
み信号を発生する回路である。各種制御回路549は、
サブCPU510に対するリセット信号や内部に用意し
たタイマの設定等を行なう回路である。
【0080】エミュレーション用制御回路500の内部
のメモリマップを、図21に示す。サブCPU510
は、例えばインテル社製i80486DXといったマイ
クロコンピュータであり、その00000000[h]
から0007FFFF[h]までの512KBに、RA
M522が割り当てられている。その上位の64KBに
は、I/O側の入出力デバイスが割り当てられおり(I
O側マップドIO)、更にその上位64KBには98用
のスロットが割り当てられている(98スロットマップ
ドIO)。アドレス000A0000[h]から000
AFFFF[h]までの64KBには、ホストCPU側
の入出力デバイスが割り当てられており(HOST側マ
ップドIO)、その上位64KBにはエミュレーション
用制御回路500の入出力ポート等が割り当てられてい
る。
【0081】256KBのROM520は、000C0
000[h]から000FFFFF[h]までに割り当
てられている。なお、エミュレーション用制御回路50
0内部では、アドレス信号は20ビット分しかデコード
していないので、1MBより上位には、下位のアドレス
のイメージが現われる。
【0082】エミュレーション用制御回路500の入出
力ポートなどに割り当てられた機能を、図22ないし図
26に示した。これらの図では、メモリマップに割り当
てられた各IO(メモリマップドIO)のアドレスは、
サブシステムIOの先頭番地からのオフセットにより示
されている。オフセット+0000〜+0002のアド
レスには読出用のレジスタが割り当てられており、この
レジスタは、ホストCPU側のステータスレジスタとし
て働く。レジスタの各ビットには、図示するように、エ
ミュレーション用制御回路500の動作に関する情報が
定義されている。なお、オフセット+0003のアドレ
スは未定義である。エミュレーション用制御回路500
で使用したサブCPU510は、データバスの幅が32
ビットであるため、アドレスは4バイトを基本単位とし
て扱う。
【0083】オフセット+0004のアドレスは、図2
3に示すように、読み書き可能なレジスタとして定義さ
れており、メインCPU421のリセットなど、ホスト
側のコントロールする機能が割り当てられている。オフ
セット+0010のアドレスは、読出専用レジスタとし
て規定されており、割り込み要求に応答するサイクルを
発生するレジスタとして働く。このレジスタをサブCP
U510が読むと、I/O側のPIC466に1回割り
込みアクノリッジサイクルが発生する構成となってい
る。オフセット+0014のアドレスには、図25に示
すように、読み書き可能なレジスタが割り当てられお
り、サブCPU510のキャッシュ動作を禁止または有
効にする機能が定義されている。オフセット+0015
のアドレスは、読み書き可能なレジスタが割り当てられ
ており、このレジスタの最下位ビット(D8)を値0か
ら値1に書き直すと、メインCPU421に対して割り
込み信号MCPURTが発生する。
【0084】オフセット+0016のアドレスは、書込
専用のレジスタとして定義されており、このレジスタの
内容を読み取ると、サブCPU510のキャッシュの内
容をフラッシュするキャッシュフラッシュ動作が行なわ
れる。更に、図26に示すように、オフセット+003
4のアドレスには、読み書き可能なレジスタが割り当て
られており、その下位3ビット(D0ないしD2)を設
定することで、PIC466への割り込みの設定を行な
うことができる。また、オフセット+0035のアドレ
スは、読み書き可能なレジスタとして定義されており、
このレジスタに所定のデータを書き込むことで、タイマ
やBIOS等を、98系のモードとDOS/V機のモー
ドとの間で入れ替えることができる。オフセット+00
36のアドレスは、読み書き可能なレジスタとして定義
されており、割り込みのマスク用のレジスタとして用い
られる。オフセット+0037のアドレスは、エラー通
知用ポートとして定義されており、エミュレーション用
制御回路500内部で処理できないエラーが発生した場
合に、これを通知するために、所定のデータが書き込ま
れる。
【0085】以上、エミュレーション用制御回路500
用の代表的な入出力レジスタのいくつかについて説明し
た。次に、エミュレーション用制御回路500の動作に
ついて説明する。特に明示しない場合でも、エミュレー
ション用制御回路500のサブCPU510は、図21
に示した各IOをアクセスすることで、ホストCPU側
とI/O側と、様々なデータをやり取りし、エミュレー
ションを実行する。
【0086】まず、初期化の処理について説明する。初
期化の処理は、この装置全体のリセットがなされたと
き、あるいは装置の電源がオンになされたとき、実行さ
れるものであり、図27に示すように、まずサブCPU
510の動作を開始させ、メインCPU421のリセッ
ト状態を継続する処理を行なう(ステップS600)。
即ち、メインCPU421を止めたまま、まずサブCP
U510側の準備を開始するのである。続いて、制御回
路500のROM520の内容をRAM522に転送す
る処理を行なう(ステップS610)。エミュレーショ
ンのためのプログラムはROM520に予め記憶されて
いるが、実際の処理は、処理を高速化するために、この
プログラムを一旦RAM522上に展開してから行なわ
れる。
【0087】続いて、制御回路500に用意されたI/
O入出力ポートを用いて各種の設定処理を行なう(ステ
ップS620)。この処理は、例えばサブCPU510
のキャッシュ制御を行なうか否か(図25に示すオフセ
ット+0014もしくは+0016のレジスタ参照)の
設定、割込ベクタの設定などの処理である。その後、I
/Oバス442に接続された各種I/Oデバイスを初期
化し、設定する処理を行なう(ステップS630)。こ
のエミュレーション装置では、ハードウェアはDOS/
V機であり、I/O側インタフェース536を介して、
タイマ468など各I/Oデバイスを初期化し、必要に
応じて各I/Oデバイスのレジスタ等に値を書き込み、
所定の設定を行なうのである。
【0088】以上で初期化の処理を終了し、次に、エミ
ュレーション用制御回路500のサブCPU510は、
エミュレーションプログラムの実行を開始する。エミュ
レーションプログラムの実際については後述するが、基
本的には、メインCPU421からPCIバスに出力さ
れるインストラクションを監視し、エミュレーションが
必要な場合にはその命令をハード的にインターセプトし
て、必要な処理を行なう。サブCPU510は、エミュ
レーションプログラムの実行が可能な状態になると、い
ままでリセット状態にとどめておいたメインCPU42
1のリセット状態を解除する(ステップS650)。こ
の結果、メインCPU421は、その処理を開始する。
メインCPU421を備えたこのマシンは、DOS/V
機としてのハードウェアを備えるものであるが、リセッ
トが解除されて、ブートローダにより、ハードディスク
484からOSの最初の部分を読み取ってくる段階か
ら、既にエミュレーション用制御回路500によるエミ
ュレーションが働いており、このマシンはあたかもPC
−9800機であるかのように動作する。
【0089】なお、第2実施例でも第1実施例同様、エ
ミュレーションのプログラムは、エミュレーションの対
象とする処理を解析するディスパッチャと各I/Oにつ
いて実際にエミュレーションを実行する実行モジュール
とから構成されている。これらのモジュールは、第1実
施例と同様テーブルに登録されており、その名前で互い
に呼び出したり、あるいは登録したアドレスを用いて直
接呼び出したりすることができる。
【0090】大まかなエミュレーションの流れは、図2
8に示すように、第1実施例で説明したものと同様であ
るが、エミュレーションのきっかけを判断する部分が第
2実施例では異なる。即ち、第1実施例では、特権命令
などの実行を判断してカーネルがエミュレーションを開
始していたのに対して、第2実施例では、エミュレーシ
ョン用制御回路500がバスを監視してエミュレーショ
ンを開始する。この点を、メインCPU421から、I
SAバス442に接続された各I/Oに対するデータを
読み出す処理を例に取って説明する。図29は、メイン
CPU421からI/Oリードの命令が発行された場合
の各部の処理を示すフローチャートである。まずメイン
CPU421がI/Oリードの処理を開始すると、PC
Iブリッジ430を介してPCIバス432に対してI
/OリードのためのアドレスとI/Oリードのための制
御信号が出力される。エミュレーション用制御回路50
0のホストCPU側インタフェース532は、制御信号
線の状態からメインCPU421が発行した命令をI/
Oリードであると判断すると、PCIバスの状態をラッ
チし、メインCPU421に対してウェイト信号を出力
する。この結果、メインCPU421は、実行を開始し
たI/Oリードサイクルを完了することなく、そのリー
ドサイクルを継続する。ホストCPU側インタフェース
532は、メインCPU421側にウェイト信号を出力
したまま、サブCPU510に対して割り込みを発生す
る。実際には、コントロール回路540を介して、サブ
CPU510に割り込み信号を出力する。
【0091】この結果、サブCPU510は、図29に
示す割り込み処理ルーチンを起動し、まずホストCPU
側インタフェース532のアドレスラッチ552にラッ
チされたI/Oリードのためのアドレスを読み込む処理
を行なう(ステップS700)。次にこのアドレスおよ
びそれまでのI/Oデバイスに対する処理に基づいて、
I/Oアクセスの種類や現在の状況などを判断する。即
ち、サブCPU510は、第1実施例で説明したよう
に、仮想的なPC−9800機のI/Oの現在の状況を
RAM522に保存しているから、これに照らして、現
在のI/Oアクセスが何を使用としたものであるかを判
断することができる。この段階で、第1実施例のカーネ
ルとディスパッチャと同様の処理がなされ、必要なI/
Oデバイスに対応する処理モジュールが呼び出されるこ
とになる。
【0092】第1実施例で説明した処理モジュールが呼
び出されると、そのモジュール内で実際のI/Oデバイ
スの状態を読み込む処理がなされる(ステップS72
0)。これは、DOS/V機としてのハードウェアを備
えた実際のマシンのI/Oデバイスのレジスタの内容等
をI/O側インタフェース536を介して読み取るので
ある。次に、こうして読み取った現在のI/Oデバイス
の状態と既に蓄積しておいたこれまでのI/Oデバイス
の状態とから、要求されているデータを演算する処理を
行なう(ステップS730)。サブCPU510は、演
算したデータをホストCPU側インタフェース532の
データラッチ553にラッチする(ステップS74
0)。以上で、サブCPU510側の割り込み処理を終
了する。
【0093】サブCPU510によるデータのデータラ
ッチ553へのラッチが行なわれると、ホストCPU側
インタフェース532は、そのハードウェアの働きによ
り、メインCPU421に出力していたウェイト信号を
取り下げる。即ち、メインCPU421のウェイとを解
消する。この結果、メインCPU421はI/Oリード
のサイクルを進め、PCIの制御信号IRDY,TRD
Yに同期して、データラッチ553にラッチされたデー
タをI/Oデバイスからのデータだとして読み取り、I
/Oリードサイクルは完了したとして、I/Oリードの
処理を終了する。
【0094】以上の処理にタイミングチャートを図30
に例示する。メインCPU側のPCIバスでは、メイン
CPU421によるI/Oリードに対応して、FRAM
E,TRDY,DEVSELの信号が次々のアクティブ
となるが、エミュレーション用制御回路500側でウェ
イト信号WAITを発行するため、そのバスサイクルの
終了は引き延ばされる。その間に、エミュレーション用
制御回路500のサブCPU510は、割り込み処理に
引き続き、アドレスの読み込み(ステップS700)、
解析処理(ステップS710)、実際のI/Oアクセス
(ステップS720)、データのラッチ(ステップS7
30)等を次々と行なう。I/Oアクセスでは、I/O
側のPCIバスに対して、FRAME,IRDYの信号
を出力し、信号DEVSEL,TRDYの応答により、
データの読み込みが終了すると、FRAME,IRDY
を反転させ、バスサイクルを終了している。復帰の処理
がなされると、メインCPU421側のPCIバスに対
して出力していたウェイト信号WAITを取り下げ、再
度待機状態に戻る。ウェイト信号が取り下げられたこと
により、PCIバスのバスサイクルは進行し、各信号
(TRDY,IRDY,DEVSEL)も完了する。
【0095】以上I/Oリードを例に挙げて説明した
が、I/Oライトの場合も同様である。即ち、メインC
PU421側から書き込み用のデータを伴ってI/Oラ
イトのサイクルが開始されると、そのアドレス信号はア
ドレスラッチ552に、データはデータラッチ553
に、それぞれラッチされ、同時にメインCPU421に
対するウェイト信号の出力とサブCPU510に対する
割り込みの発生とがなされる。割り込み処理を開始した
サブCPU510は、アドレスラッチ552にセットさ
れたアドレス等から要求されているI/Oアクセスの種
類を解析し、データラッチ553にラッチされていたデ
ータに基づいて、I/Oリードの場合と同様、I/O側
のPCIバスを制御して、実際の各I/Oデバイスに対
して、必要なデータの書き込み処理を行なう。データの
書き込みは、エミュレーション用に用意された各処理モ
ジュールでなされることは、第1実施例と同様である。
書き込まれるデータは、メインCPU421が用意した
データをそのまま用いることも有り得るが、エミュレー
ションを実行する各処理モジュールが求めたデータとな
るのが通常である。
【0096】I/Oデバイスへのデータの書き込みが完
了すると、ダミーのデータをデータラッチ553に書き
込むことで、メインCPU421に対するウェイト信号
を取り下げるから、その後メインCPU421側のI/
Oライトのサイクルは進行し、完了する。
【0097】次に第2実施例における割り込み処理につ
いて説明する。第1実施例では、DOS/V機では割り
込み要因となっておらずPC−9800機では割り込み
要因となっているものをエミュレートするために、割り
込みコントローラエミュレータIRMが仮想割り込みを
発生する構成としていた。ハードウェアとしてエミュレ
ーション用制御回路500を設けた構成でも同様な対応
は可能であるが、本実施例では、以下の構成を採用して
いる。即ち、エミュレーション用制御回路500にはコ
ントロール回路540が設けられており、この各種制御
回路549の設定により、サブCPU510は所定の時
間毎に割り込み要求を受ける。割り込み要求を受けたサ
ブCPU510は、割り込み要求を上げないI/Oデバ
イスの状態を読み取り、PC−9800機であれば割り
込み要求を上げる条件となったと判断した場合には、こ
れを検出し、メインCPU421に対して割り込みの要
求を出力する。従って、仮想的な割り込みを出力して、
メインCPU421の動作モードを切り換えるといった
処理を行なう必要がない。
【0098】以上説明したように、第2実施例のエミュ
レーション装置は、メインCPU421以外にエミュレ
ーション用制御回路500を備え、そのサブCPU51
0によりエミュレーションの処理を行なっている。従っ
て、メインCPU421を予めプロテクトモードで動作
させておき、特権命令の実行などを検出してモードを切
り換えてエミュレーションを行なうという第1実施例の
構成と較べると、モード切り換えによるオーバーヘッド
が存在しないため、高速にエミュレーションを行なうこ
とができるという利点がある。また、メインCPU42
1によるI/Oリードなどのバスサイクルを引き延ば
し、そのバスサイクルの完了までに必要なI/Oデバイ
スのアクセスを済ませるから、メインCPU421側か
らみると、通常のI/Oアクセスと何等差異がない。こ
の結果、エミュレーションを一層容易かつ正確に行なう
ことが可能となった。例えば、エミュレーションを行な
おうとするアプリケーションプログラムがプロテクトモ
ードで動作するものであっても、何等問題なく動作す
る。また、I/Oアクセス中に頻繁に状態が変化して行
くようなデバイスでも支障なくエミュレーションするこ
とができる。
【0099】また、エミュレーション用制御回路500
は、コネクタ530,534により接続されているだけ
なので、サブCPU510をより高速なものにしたエミ
ュレーション用制御回路500を差し替えるだけで、エ
ミュレーションの速度を高めることもできる。
【0100】上述した第2実施例では、メインCPU4
21からのI/Oアクセスが発生すると、ウェイト信号
を出力してメインCPU421のサイクルを引き延ばし
ているが、I/Oライトについては、そのまま通常のバ
スサイクルで終了させても差し支えない。この場合に
は、アドレスラッチ552,データラッチ553にラッ
チされたデータをサブCPU510が読み取って、直ち
にRAM522に転送しておき、メインCPU421の
動作とは無関係にエミュレーション用制御回路500が
後から実際のI/Oデバイスへの書き込みを行なえばよ
い。また、I/Oデバイスの状態を所定のインターバル
でサブCPU510が常時読み込んでおき、メインCP
U421側からI/Oリードがなされた場合には、予め
読み込んでおいたデータに基づき、高速にメインCPU
421に応答する構成も好適である。
【0101】この実施例について説明する。サブCPU
510は各種制御回路549内のタイマ回路に所定の値
を書き込んでおき、所定の時間毎にタイマ割り込みの要
求を受け付ける。このタイマ割り込みの要求を受け付け
ると、サブCPU510は、図31に示したタイマ割込
処理ルーチンを起動する。タイマ割込処理ルーチンを起
動すると、サブCPU510は、まずI/O側インタフ
ェース536を介して、DOS/V機としてのI/Oの
状態を読み込む処理を行なう(ステップS800)。I
/Oの状態は、多数に上るから、時間的に総てのI/O
の状態を読み込めない場合には、どこまで読み込んだか
を記録しておき、割込処理ルーチンが起動される度に、
順次読み込んで良いし、I/O毎に書き換えられる可能
性が分かっていれば、毎回読み込むI/Oと数回に一回
だけ読み込むI/Oとを分けておき、割込ルーチンが起
動される度に判断して必要なI/Oの状態を読み込むも
のとすればよい。また、I/Oのうち、アクセスされる
頻度の高いものや重要性の高いものだけを読み込むもの
としてもよい。
【0102】こうして読みとったI/Oの状態を、次に
RAM522に保存もしくはすでにデータが存在する場
合には更新する処理を行なう(ステップS810)。こ
の結果、図31に示したタイマ割込処理ルーチンが所定
のインタバルで実行されると、やがてRAM522に
は、必要なI/Oの状態がすべて保存された状態とな
る。
【0103】次に、メインCPU421側から、I/O
に対するアクセスが開始された場合について、図32を
用いて説明する。図32に示したように、メインCPU
421からのI/Oアクセスが開始されると、すでに説
明した図29と同一のシーケンスが開始され、バス状態
のラッチが行なわれると共に、メインCPU421に対
してはウェイト信号が出力されて、その処理の進行が停
止され、サブCPU510に対して割込が発生される。
このとき、サブCPU510は、図32に示す割込処理
ルーチンを起動し、まずメインCPU421から読み出
そうとしたI/Oの状態がRAM522に保存されてい
るか否かの判断を行なう(ステップS820)。
【0104】RAM522にI/Oの状態が保存されて
いると判断された場合には、RAM522から対応する
情報を読み出し(ステップS830)、この情報をHO
STPCIIF550のデータラッチ553にセットし
た後(ステップS840)、「RTN」に抜けて、本ル
ーチンを終了する。この結果、実際にI/Oをアクセス
することなく、必要な情報をメインCPU421に返す
ことができ、メインCPU421に対するウェイトは、
短い時間で解消する。
【0105】他方、RAM522に必要な情報が存在し
ないと判断された場合には(ステップS820)、ステ
ップS700以下に移行し、図29により説明した処理
と同一の処理を実行する(ステップS700ないしS7
40)。この結果、RAM522に情報が存在しない場
合には、メインCPU421を待たせた状態で実際に対
応するI/Oの状態を読み出し、これをメインCPU4
21側に引き渡す。
【0106】以上の説明からも明らかなように、この実
施例によれば、サブCPU510側でマシンのI/Oの
状態を定期的に読み出してRAM522に保存してお
り、メインCPU421からI/Oリードの要求が出さ
れると、RAM522に記憶しておいたI/Oの情報に
ついては、直ちにメインCPU421側に必要な状態を
引き渡すことができる。したがって、この場合には、メ
インCPU421からのI/Oアクセスをきわめて短時
間に完了することができる。
【0107】次に、I/Oアクセスを高速化する他の実
施例について、図33のフローチャートを用いて説明す
る。この実施例は、ハードディスクドライブ484やフ
レキシブルディスクドライブ482へのアクセスを高速
化するものである。メインCPU421側からこれらの
ドライブに対してセクタリードの処理が行なわれた場合
を例に挙げて説明すると、まずメインCPU421から
PCIバス432を介して、読み出そうとするトラック
やセクタの指定がなされ、次に指定されたセクタからデ
ータを読み出すセクタリードの命令が出力されたとす
る。この場合、メインCPU421は、直接各ドライブ
を読み出すことはできないから、サブCPU510に対
して割込が発生され、と同時にメインCPU421の動
作はウェイト信号により停止される。
【0108】サブCPU510は、この割込信号により
図33に示したセクタリードエミュレーション処理を開
始する。まずデータバッファ内にデータがあるか否かの
判断を行なう(ステップS900)。データバッファ
は、ディスクなどからデータを読み出したり書き込んだ
りする場合に用いられるバッファであり、通常ディスク
システム毎に必要なバイト数だけRAM522の所定の
領域に用意されている。ディスクシステムに対して初め
てアクセスされる場合などには、バッファには何のデー
タも存在しないから、この場合には、サブCPU421
は、すでに指定されたトラック,セクタから1セクタ分
のデータを読み出す処理を行なう(ステップS91
0)。データバッファにデータがあると判断された場合
には、バッファ領域からデータを読み出す処理を行なう
(ステップS920)。
【0109】その後、メインCPU421に対してこの
データをセットし(ステップS930)、メインCPU
421に対するウェイト信号を取り下げ、メインCPU
421による本来の動作を継続させる。メインCPU4
21は、この結果、必要なセクタデータを取得し、セク
タリードの処理を完了するが、サブCPU510は、更
に処理を継続し、次のセクタのデータをI/OPCIF
560からPCIバス432を介して読み出す処理を行
なう(ステップS940)。読み出した次のセクタのデ
ータはバッファに保存しておく(ステップS950)。
この結果、一つのセクタのデータが読み出され、メイン
CPU421側に転送されると、引き続き、次のセクタ
のデータが読み出され、バッファに保存されることにな
る。従って、連続したセクタが読み出されるような場
合、あるいは同じセクタが連続して読み出される場合に
は、バッファからデータを読み出すだけですみ、セクタ
リードの処理を高速に完了することができる。なお、バ
ッファの用量をある程度大きく取っておけば、直前に読
み出したセクタ以外のセクタについても、再度読み出す
場合の時間を短縮することが可能となる。また、セクタ
の先読みを複数セクタ分、行なうものとすることもでき
る。バッファの初期化やクリアなどは、他の処理プログ
ラムにより行なわれるが、ここでは特に図示しない。
【0110】なお、上記説明では特に言及しなかった
が、メインCPU421がI/O側に存在するメモリ
(例えばBIOS)にアクセスする場合、エミュレーシ
ョン用制御回路500は単にバス転送を行なうのみでエ
ミュレーションの動作は行なわない。従って、メインC
PU421側に対するウェイト信号の出力は行なうが、
データの解析などは行なわず、I/O側PCIバスに対
して同じメモリアクセスのサイクルを発生させ、データ
を転送するだけである。また、DMA450がDMA転
送を要求した場合には、エミュレーション用制御回路5
00のコントロール回路540内に設けられたバスアー
ビタ544がこの要求を受け付け、バスアービタ544
がメインCPU421側の動作を停止させてバスを開放
させる。その後、バスアービタ544は、バスのアクセ
ス方向をDMA450側からアクセス可能に変更し、D
AM450にバスの使用を許可する。その後、DMA4
50をホストとしてデータの転送が行なわれる。
【0111】以上、いくつかの実施例を挙げて本願発明
について説明したが、本願発明はこうした実施例に何等
限定されるものではなく、発明の要旨を逸脱しない範囲
内において、種々なる態様で実施し得ることは勿論であ
る。例えば、実行モジュール単位でその少なくとも一
つ、あるいは実行モジュールを構成する一部を、ハード
ウェアにより実現するものとしても差し支えない。実行
マシンのCPUの動作速度がさほど高くない場合には、
実行モジュールを繰り返し呼び出す必要がある実行モジ
ュールなどでは、モジュール間通信などを用いても、エ
ミュレーションによる動作速度がターゲットマシンでの
動作速度と較べて相当に低下する場合が考えられる。こ
うした実行モジュールについては、ハードウェアによ
り、ターゲットマシンの機能をそっくり実現すること
は、動作速度の改善に大きく資する。
【0112】上記実施例では、DOS/V機上でPC−
9800機を実現する構成を例に挙げて説明したが、P
C−9800機上でDOS/V機を実現することも容易
である。更に、他のアーキテクチャに適用することも可
能である。
【0113】図1や図28に示した実行モジュールの分
け方は一例に過ぎず、モジュールを更に細分したり、併
合したりすることも可能である。例えば、キーボードエ
ミュレータKEMは、キーボード72からの割込が生じ
た場合、割り込みコントローラエミュレータIRMから
仮想割込が生じた場合とで2度呼び出されるので、呼び
出される機能に応じて2つの別個のモジュールとして構
成することも可能である。
【0114】
【発明の効果】以上説明したように本発明のエミュレー
ション装置では、ターゲットマシンに関わる処理に属す
るものは、予め登録した呼び出し用情報を用いて呼び出
した実行モジュールにより、その等価な処理として実行
する。従って、ターゲットマシンの機能を実行マシン上
でエミュレートする構成を容易に実現できるという効果
を奏する。通常、ターゲットマシンの機能ごとにこれを
エミュレートするモジュールを設けたのでは、モジュー
ルの数が増えて、その管理が煩雑となってしまうが、本
発明のエミュレーション装置では、実行マシンの立ち上
げ時に、実行モジュールを呼び出すための呼び出し用情
報を登録するので、多数の実行モジュールの管理、変更
や更新が極めて容易である。
【0115】実行モジュールを呼び出すための呼び出し
用情報の登録を、実行モジュールに用意された所定の処
理プログラムの実行に一旦処理を移すことで、各実行モ
ジュール自体に行なわせる構成とし、実行モジュール自
体が呼び出し用情報を登録をするものとすれば、初期化
手段は、どう言った呼び出し情報を登録すべきかとか、
どれだけの実行モジュールが登録されるかといった情報
を知る必要がなく、その構成を簡易にでき、実行モジュ
ールの追加や変更がきわめて容易となる。
【0116】また、実行モジュールの少なくとも一つ
が、他の実行モジュールが登録した呼び出し用情報を記
憶しており、その実行モジュールの実行時に、この呼び
出し用情報を用いて、呼出手段を介して間接的に(しか
し検出手段や判別手段を呼び出すことなく)、他の実行
モジュールを呼び出すものとすれば、検出手段や判別手
段を介するオーバーヘッドがなくなり、全体の実行速度
を向上することができる。
【0117】更に、実行モジュールの少なくとも一つ
が、初期化手段による実行モジュールの組み込み時に、
この実行モジュールより先に組み込まれた他の実行モジ
ュールの内部に用意され該他の実行モジュールを構成す
る処理の少なくとも一つを直接呼び出す直接呼出用情報
を取得するものとすれば、後に組み込まれた実行モジュ
ールは、その実行モジュールの実行時に、取得した直接
呼出用情報を用いて、この実行モジュールにより先に組
み込まれた他の実行モジュールを直接呼び出すことが可
能となり、エミュレーションの処理の一層の高速化を図
ることができる。先に組み込まれた他の実行モジュール
に、後に組み込まれる実行モジュールがその内部に用意
されこの実行モジュールを構成する処理の少なくとも一
つを直接呼び出す直接呼出情報を教えるものとすれば、
先に組み込まれた実行モジュールが後で組み込まれる実
行モジュールを直接呼び出すことが、可能となるという
利点も得られる。
【0118】また、実行モジュールの少なくとも一つ
が、ターゲットマシンのハードウェア上の割込に伴う処
理と等価な処理を実行するモジュールであり、このモジ
ュールが直接呼出情報を教える他の実行モジュールが、
割込の発生自体を処理するモジュールである場合におい
て、この実行モジュールが、その登録時に、他の実行モ
ジュールに対して、割込を特定する情報を登録するもの
とすれば、割り込みの発生時にその割込を容易に特定で
きるので、割込発生時の処理が極めて容易となる。
【0119】実行モジュールは、すべてソフトウェアに
より構成するのではなく、少なくとも複数の実行モジュ
ールの一部の実行モジュールと呼出手段とを、実行マシ
ンに実装され、実行マシンの演算処理部とは異なる演算
処理部を備えたマシン上で実現すれば、エミュレーショ
ンの実行速度を改善することができる。
【0120】また、入出力装置のデータの入力および/
または出力と等価な処理を実行するモジュールを、実行
マシンの入出力装置の動作に伴う呼び出しと、ターゲッ
トマシンにおける対応する入出力装置との間のデータの
入出力を模擬して生起された割込による呼び出しと、2
度呼び出される構成とすれば、入出力装置の機能をより
一層正確に模擬することができ、エミュレーション装置
の互換性を一層高いものとすることができる。
【0121】また、本発明の第2のエミュレーション装
置は、ターゲットマシン用の命令をそのまま実行可能な
演算処理部を有する制御回路を、実行マシンの演算処理
部と入出力部とを接続するバスに介装しているから、実
質的なエミュレーションの処理を、実行マシンにおいて
ハードウェアとして用意された制御回路により実行する
ことができ、エミュレーションの速度を格段に改善する
ことができる。
【0122】この第2のエミュレーション装置におい
て、前記検出手段が、前記実行マシンが発行した命令が
前記ターゲットマシンの入出力部を操作する命令である
ことを検出したとき、この命令の発行動作の完了を遅延
させる構成を取れば、見かけ上実行マシンのコンピュー
タの動作毎にエミュレーションが完了することになり、
ターゲットマシンの動作を一層正確にエミュレーション
することができるという効果を奏する。
【0123】また、エミュレーションの開始前に、エミ
ュレーションを実際に司る実行モジュールを組み込み、
該実行モジュールを呼び出すための呼び出し用情報を登
録すると共に、実行モジュールを呼び出す際には、予め
登録された呼び出し用情報を用いるものとすれば、実行
モジュールの呼出を簡略化することができ、好適であ
る。
【0124】更に、実行マシンの立ち上げ時に、制御回
路が動作可能な状態となるまでの間、実行マシンのコン
ピュータに対してその動作を禁止する禁止信号を出力す
るものとすれば、制御回路がエミュレーション動作可能
となるまでの間に実行マシンが動作してしまうことがな
く、実行マシンの全動作に対して、確実にエミュレーシ
ョンを行なうことができる。
【0125】制御回路に、この制御回路が介装されたバ
スの実行マシンの演算処理部側のバスと実行マシンの入
出力側のバスとの間でデータのやり取りを行なうものと
すれば、両バスでのデータのやり取りを調整することが
でき、DMA転送などの処理を容易にすることができ
る。
【0126】制御回路に、ターゲットマシンに用いられ
ている演算処理部より動作速度が速い演算処理部を備え
るものとすれば、エミュレーションによるオーバーヘッ
ドによる全体的な動作速度の低下を補うことができ、好
適である。
【図面の簡単な説明】
【図1】本発明の一実施例であるエミュレーション装置
の概略構成を示すブロック図である。
【図2】実行マシンであるDOS/V機の概略構成図で
ある。
【図3】タスクアドレスと物理メモリとの関係を示す説
明図である。
【図4】実行モードとその切り換えの関係を示す説明図
である。
【図5】DOS/V機が立ち上がった直後のメモリマッ
プおよびI/Oマップを示す説明図である。
【図6】エミュレータ装置の初期化処理ルーチンを示す
フローチャートである。
【図7】初期化の処理の様子を示す説明図である。
【図8】DOS/V機の割込関係の回路を示すブロック
図である。
【図9】実行モジュールを組み込む際の処理ルーチンを
示すフローチャートである。
【図10】ディスパッチャ呼出ルーチンを示すフローチ
ャートである。
【図11】エントリポイント取得ルーチンを示すフロー
チャートである。
【図12】実行モジュールの組み込み時における呼出ア
ドレスの登録の様子を示す説明図である。
【図13】実行モジュールがその登録時に他の実行モジ
ュールを呼び出す様子を示す説明図である。
【図14】実行モジュール間の直接呼出(モジュール間
通信)の様子を示す説明図である。
【図15】DOS/V機におけるキーボード周りの回路
を示すブロック図である。
【図16】PC−9800機におけるーボード周りの回
路を示すブロック図である。
【図17】実施例のエミュレーション装置において、キ
ーボードからの入力をエミュレートする様子を示す説明
図である。
【図18】同じくキーボードからの入力のエミュレーシ
ョンの後半の様子を示す説明図である。
【図19】第2実施例のエミュレーション装置の構成を
示すブロック図である。
【図20】エミュレーション用制御回路500の内部構
成を示すブロック図である。
【図21】エミュレーション用制御回路500のメモリ
空間を示す説明図である。
【図22】エミュレーション用制御回路500において
メモリマップに割り当てられたI/Oレジスタの内容を
示す説明図である。
【図23】同じく他のI/Oレジスタの内容を示す説明
図である。
【図24】同じく他のI/Oレジスタの内容を示す説明
図である。
【図25】同じく他のI/Oレジスタの内容を示す説明
図である。
【図26】同じく他のI/Oレジスタの内容を示す説明
図である。
【図27】サブCPU510における初期化の処理を等
を示すフローチャートである。
【図28】第2実施例のエミュレーション装置における
実行モジュールなどを例示するブロック図である。
【図29】I/Oリードの場合のサブCPU510の処
理を示す説明図である。
【図30】I/Oリードの場合のバスアクセスの様子を
示すタイミングチャートである。
【図31】実施例の変形例におけるサブCPU510の
割込処理ルーチンを示すフローチャートである。
【図32】変形例における全体の処理のついて説明する
フローチャートである。
【図33】ディスクアクセスの場合の処理を示すフロー
チャートである。
【符号の説明】
20…演算処理部 21…CPU 22…ローカルバス 23…キャッシュメモリ 24…キャッシュコントローラ 25…メインメモリ 30…PCIブリッジ 32…PCIバス 40…コントローラ部 42…ISAバス 44…VGA 46…SCSIコントローラ 48…PCI−ISAブリッジ 54…複合I/Oポート 56…サウンドI/O 58…ハードディスク 60…I/O部 62…拡張スロット 64…KEY 66…PIC 68…タイマ 72…キーボード 73…マウス 74…スピーカ 76…CRT 82…フロッピディスク装置 84…ハードディスク 86…パラレルポート 88…プリンタ 90…シリアルポート 92…モデム 96…マイクロフォン APP…アプリケーションプログラム An…呼出アドレス CFM…文字フォントエミュレータ DEM…表示エミュレータ DMn…実行モジュール DP…ディスパッチャ DT…ディスパッチャテーブル EP…エントリポイント GEM…グラフィックエミュレータ IRM…割込コントローラエミュレータ KEM…キーボードエミュレータ KR…カーネル MEM…メモリエミュレータ MUM…マウスエミュレータ TEM…テキストエミュレータ TIM…タイマエミュレータ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 小島 政典 長野県諏訪市大和三丁目3番5号 セイコ ーエプソン株式会社内 (72)発明者 赤堀 豊 長野県諏訪市大和三丁目3番5号 セイコ ーエプソン株式会社内 (72)発明者 村上 誠 長野県諏訪市大和三丁目3番5号 セイコ ーエプソン株式会社内

Claims (16)

    【特許請求の範囲】
  1. 【請求項1】 少なくとも演算処理部、記憶部、入出力
    部を備えたコンピュータである実行マシン上で、該演算
    処理部が実行する命令セットは互換性がありかつ該実行
    マシンのアーキテクチャとは異なるアーキテクチャを備
    えたコンピュータであるターゲットマシン用のプログラ
    ムを実行させるエミュレーション装置であって、 前記ターゲットマシンの前記アーキテクチャから定まる
    機能毎に、該機能と等価な処理を前記実行マシンに実行
    させる複数の実行モジュールと、 エミュレーションの開始前に、前記実行モジュールを組
    み込むと共に、該実行モジュールを呼び出すための呼び
    出し用情報を登録する初期化手段と、 前記プログラムが前記実行マシン上で実行される際、該
    プログラムが少なくとも前記ターゲットマシンに関わる
    処理に属するとき、これを検出する検出手段と、 該検出手段による検出がなされたとき、前記プログラム
    が属する前記ターゲットマシンの機能を判別する判別手
    段と、 該判別された機能の応じて、該機能毎に用意された実行
    モジュールを、前記登録された呼び出し用情報を用いて
    呼び出す呼出手段とを備えたエミュレーション装置。
  2. 【請求項2】 前記初期化手段は、実行モジュールを呼
    び出すための呼び出し用情報の登録を、該実行モジュー
    ル毎に用意された所定の処理プログラムの実行により行
    なわせる請求項1記載のエミュレーション装置。
  3. 【請求項3】 請求項1記載のエミュレーション装置で
    あって、 前記実行モジュールの少なくとも一つは、 他の実行モジュールが登録した前記呼び出し用情報を記
    憶する呼出情報記憶手段と、 該実行モジュールの実行時に、前記呼出情報記憶手段に
    記憶された呼び出し用情報を用い、前記呼出手段を介し
    て間接的に、前記他の実行モジュールを呼び出す間接呼
    出手段とを備えたエミュレーション装置。
  4. 【請求項4】 請求項1記載のエミュレーション装置で
    あって、 前記実行モジュールの少なくとも一つは、 初期化手段による該実行モジュールの組み込み時に、該
    実行モジュールより先に組み込まれた他の実行モジュー
    ルの内部に用意され該他の実行モジュールを構成する処
    理の少なくとも一つを直接呼び出す直接呼出用情報を取
    得する直接呼出情報取得手段と、 該実行モジュールの実行時に、前記直接呼出用情報を用
    いて、該他の実行モジュール内部の前記処理を直接呼び
    出す直接呼出手段とを備えたエミュレーション装置。
  5. 【請求項5】 請求項1記載のエミュレーション装置で
    あって、 前記実行モジュールの少なくとも一つは、 初期化手段による該実行モジュールの組み込み時に、該
    実行モジュールより先に組み込まれた他の実行モジュー
    ルに、該組み込まれる実行モジュール内部に用意され該
    実行モジュールを構成する処理の少なくとも一つを直接
    呼び出す直接呼出用情報を教える呼出情報教示手段を備
    え、 更に少なくとも該他の実行モジュールは、 該実行モジュールの実行時に、前記直接呼出用情報を用
    いて、該他の実行モジュールにより後に組み込まれた前
    記実行モジュールを直接呼び出す直接呼出手段を備えた
    エミュレーション装置。
  6. 【請求項6】 請求項5記載のエミュレーション装置で
    あって、 前記実行モジュールの少なくとも一つは、前記ターゲッ
    トマシンのハードウェア上の割込に伴う処理と等価な処
    理を実行するモジュールであり、 前記他の実行モジュールは、割込の発生自体を処理する
    モジュールであり、 前記実行モジュールは、その登録時に、前記割込の発生
    自体を処理する他の実行モジュールに対して、割込を特
    定する情報を登録する割込情報登録手段を備えたエミュ
    レーション装置。
  7. 【請求項7】 少なくとも前記複数の実行モジュールの
    一部の実行モジュールと前記呼出手段とを、前記実行マ
    シンに実装され、該実行マシンの演算処理部とは異なる
    演算処理部を有するマシン上で実現した請求項1記載の
    エミュレーション装置。
  8. 【請求項8】 請求項1記載のエミュレーション装置で
    あって、 実行モジュールの一つが、ターゲットマシンの所定の入
    出力装置のデータの入力および/または出力と等価な処
    理を実行するモジュールであり、 該モジュールが、 実行マシンの入出力装置の動作に伴い呼び出されて、該
    入出力装置との間でデータの受け渡しを行なう手段と、 該データの受け渡しの後に、前記ターゲットマシンにお
    ける対応する入出力装置との間のデータの入出力を模擬
    して生起された割込により呼び出されて、前記受け渡さ
    れたデータを、前記ターゲットマシンにおける入出力装
    置のデータとして外部とやり取りする手段とからなり、 該モジュールが、前記実行マシンの入出力装置の動作に
    際して2度呼び出されるエミュレーション装置。
  9. 【請求項9】 請求項8記載のエミュレーション装置で
    あって、 実行モジュールの一つが、ターゲットマシンのキーボー
    ドからのデータの入力と等価な処理を実行するモジュー
    ルであり、 前記キーボードとの間のデータの受け渡しをするバッフ
    ァを備えたエミュレーション装置。
  10. 【請求項10】 請求項8記載のエミュレーション装置
    であって、 実行モジュールの一つが、ターゲットマシンのマウスか
    らのデータの入力と等価な処理を実行するモジュールで
    あり、 前記マウスとの間のデータの受け渡しをするバッファを
    備えたエミュレーション装置。
  11. 【請求項11】 少なくとも演算処理部、記憶部、入出
    力部を備えたコンピュータである実行マシン上で、該演
    算処理部が実行する命令セットは互換性がありかつ該実
    行マシンのアーキテクチャとは異なるアーキテクチャを
    備えたコンピュータであるターゲットマシン用のプログ
    ラムを実行させるエミュレーション装置であって、 前記実行マシンの前記演算処理部と前記入出力部とを接
    続するバスに介装され、前記ターゲットマシン用の命令
    をそのまま実行可能な演算処理部を有する制御回路と、 前記実行マシンのコンピュータが前記ターゲットマシン
    の入出力部を操作する命令を発行したことを、前記バス
    上の信号から検出する検出手段とを備え、 前記制御回路には、 前記ターゲットマシンの前記アーキテクチャから定まる
    機能毎に、該機能と等価な処理を前記実行マシンに実行
    させる複数の実行モジュールと、 前記検出手段により、前記発行された命令が前記ターゲ
    ットマシンの入出力部を操作する命令であることが検出
    されたとき、該命令が属する前記ターゲットマシンの機
    能を判別する判別手段と、 該判別された機能の応じて、該機能毎に用意された前記
    実行モジュールを、呼び出す呼出手段とを備えたことを
    特徴とするエミュレーション装置。
  12. 【請求項12】 請求項11記載のエミュレーション装
    置であって、 前記検出手段が、前記実行マシンが発行した命令が前記
    ターゲットマシンの入出力部を操作する命令であること
    を検出したとき、該実行マシンの前記演算処理部の該命
    令の発行動作の完了を遅延する遅延手段と、 前記呼出手段による実行モジュールの呼び出しに伴い、
    該実行モジュールが前記処理を完了したとき、前記遅延
    手段による遅延を終了し、前記実行マシンのコンピュー
    タの動作を完了させる遅延終了手段とを備えたエミュレ
    ーション装置。
  13. 【請求項13】 請求項11記載のエミュレーション装
    置であって、 エミュレーションの開始前に、前記実行モジュールを組
    み込むと共に、該実行モジュールを呼び出すための呼び
    出し用情報を登録する初期化手段を備えると共に、 前記呼出手段は、前記実行モジュールを呼び出す際、該
    初期化手段により登録された呼び出し用情報を用いる登
    録参照手段を備えたことを特徴とするエミュレーション
    装置。
  14. 【請求項14】 前記制御回路は、該制御回路が動作可
    能な状態となるまでの間、前記実行マシンのコンピュー
    タに対してその動作を禁止する禁止信号を出力する手段
    を備える請求項11記載のエミュレーション装置。
  15. 【請求項15】 請求項11記載のエミュレーション装
    置であって、 前記制御回路は、該制御回路が介装されたバスの前記実
    行マシンの前記演算処理部側のバスと前記実行マシンの
    入出力側のバスとの間でデータのやり取りを行なうため
    に、前記バスの使用の要求を調停する調停手段を備える
    エミュレーション装置。
  16. 【請求項16】 前記制御回路は、前記ターゲットマシ
    ンに用いられている演算処理部より動作速度が速い演算
    処理部を備えた請求項11記載のエミュレーション装
    置。
JP7170330A 1994-11-07 1995-06-12 エミュレーション装置 Pending JPH08190485A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP7170330A JPH08190485A (ja) 1994-11-07 1995-06-12 エミュレーション装置

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP6-298967 1994-11-07
JP29896794 1994-11-07
JP7170330A JPH08190485A (ja) 1994-11-07 1995-06-12 エミュレーション装置

Publications (1)

Publication Number Publication Date
JPH08190485A true JPH08190485A (ja) 1996-07-23

Family

ID=26493355

Family Applications (1)

Application Number Title Priority Date Filing Date
JP7170330A Pending JPH08190485A (ja) 1994-11-07 1995-06-12 エミュレーション装置

Country Status (1)

Country Link
JP (1) JPH08190485A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100289387B1 (ko) * 1997-12-31 2001-05-02 김영환 에뮬레이터의인터페이스장치
JP2020507151A (ja) * 2017-01-19 2020-03-05 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 保護ストレージ・イベント処理のランタイム・インストルメンテーション

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100289387B1 (ko) * 1997-12-31 2001-05-02 김영환 에뮬레이터의인터페이스장치
JP2020507151A (ja) * 2017-01-19 2020-03-05 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 保護ストレージ・イベント処理のランタイム・インストルメンテーション

Similar Documents

Publication Publication Date Title
US20230289305A1 (en) Direct access to a hardware device for virtual machines of a virtualized computer system
EP3491519B1 (en) Optimized uefi reboot process
US4868738A (en) Operating system independent virtual memory computer system
US9201682B2 (en) Virtualized device reset
KR100341180B1 (ko) 가상어드레싱버퍼회로,및어드레스번역방법,시스템bios의셰도잉방법,실제메모리최적화방법,실제메모리이용방법,cpu제어시스템에서의에뮬레이팅방법및cpu요청리디렉트방법
US4031517A (en) Emulation of target system interrupts through the use of counters
US20020143842A1 (en) Method and apparatus for constructing host processor soft devices independent of the host processor operating system
US8416253B2 (en) Apparatus, method, and recording medium for detecting update of image information
EP0768603A2 (en) Events management system
US5062042A (en) System for managing data which is accessible by file address or disk address via a disk track map
JPH1124943A (ja) 計算機再起動方法および計算機停止方法
TW201310345A (zh) 一種龍芯cpu主機板bios及中斷的實現方法
JPH09146777A (ja) 仮想サブシステムアーキテクチャ
JPH08147173A (ja) エミュレーション装置
US7231512B2 (en) Technique for reconstituting a pre-boot firmware environment after launch of an operating system
US5764956A (en) Computer peripheral function emulator
JP2005122334A (ja) メモリダンプ方法、メモリダンプ用プログラム及び仮想計算機システム
JPH08190485A (ja) エミュレーション装置
US20050172113A1 (en) Method and apparatus for basic input output system loading
JPH0836485A (ja) 情報処理装置及び情報処理装置の制御方法
JP3861304B2 (ja) エミュレーション装置およびその方法
JP3861925B2 (ja) エミュレーション装置およびその方法
JP3861924B2 (ja) エミュレーション装置およびその方法
JPS6049352B2 (ja) デ−タ処理装置
CN112559120A (zh) 定制化pcie总线io虚拟化支撑方法