7

重複の可能性:
エミュレーターはどのように機能し、どのように記述されていますか?

基本的なゲームボーイ エミュレータ、あるいは NES を書いてみたいと思います。私は C の基礎を知っており、Java もかなり得意なので、プログラミングに必要な基礎を知っています。私が知らないのは、人々がすべてのデータを C プログラムに処理し、それからエミュレーターを作成する方法です。ソースから学ばなければならないことはわかっていますが、なぜそこにあるのか、何をすべきなのかを知らずにコードの行を確認するのはちょっと難しいです。そのようなエミュレーターの書き方を学びたい場合、どこから始めればよいでしょうか?

インターネットを検索しましたが、エラーが多すぎて自分で理解できない不明確なチュートリアルしか見つかりませんでした。どこから始めればよいですか?

4

3 に答える 3

7

あなたはそうしない。ハードウェアをエミュレートします。プログラム データを「処理」する必要はまったくありません。CPU、グラフィック ハードウェア、入力デバイスなどを模倣するコードを記述する必要があります。

最初のステップとしては、おそらく Z-Machine エミュレーターを作成することをお勧めします。これは、コンソールではありませんが、実際には最初に普及した「エミュレーター」でした。すべてのインフォコム テキスト アドベンチャー (ゾークなど) に使用されました。テキスト指向のゲーム形式なので、グラフィックやサウンドの面でエミュレートする必要はほとんどなく、入力デバイスはキーボードのみで、実行速度/同期を気にする必要はありません。

ここに非常によく文書化されています:http://www.gnelson.demon.co.uk/zspec/preface.html

これは実際、私が最近着手しようとしているプロジェクトですが、なかなか時間が取れませんでした。

于 2012-06-21T18:20:32.817 に答える
2

コンソール エミュレーターは非常に大きなプロジェクトであり、ほとんどの場合、それほど楽しいものではないと私は予測しています。ゲームを開始する前に、多くのものを入手する必要があります。

コンソールをエミュレートしようとしている既存のオープンソース プロジェクトを見つけて、それを改善する方法を見つけられるかどうかを確認する方が楽しいかもしれません。

しかし、非常に教育的なプロジェクトを探しているだけなら、別の提案があります。独自の Scheme インタープリターを作成するか、独自の FORTH インタープリターを作成することです。これらはどちらも最小限で洗練された言語です (そしてどちらも非主流の構文規則を使用しています!)。独自の Scheme または FORTH をゼロから作成し、数日でプログラムを実行できます。

これらはおもちゃではなく、それらを書くことは教育になります。

想像してみてください: SICP[1] のコピーを入手して、自分で作成したシステムでプログラムを実行することです! または、FORTH の本のコピーを入手して、自分で作成したシステムで問題を解決してください!

これらのプロジェクトに興味がある場合は、Google で「Scheme インタープリターを書く」および/または「FORTH インタープリターを書く」を検索してください。

PS 私が最初にコンピューターを使い始めたとき、FORTH のハッキングに多くの時間を費やし、多くのことを学びました。そこから学んだ教訓は、何年にもわたって私を助けてきました。

[1] http://sicpebook.wordpress.com/

于 2012-06-21T18:53:51.800 に答える
2

おそらく、エミュレートするハードウェアに関する情報を収集することから始めます。CPU はおそらく単一の最大の部品であり、最も簡単に入手できるため、妥当な出発点です。

CPUエミュレータは、基本的にプログラムのバイトを読み取り、個々の命令をデコードして実行します。通常、デバイスのメモリを表す大きな配列と、CPU のレジスタを表すいくつかの変数を割り当てます。これらの「レジスタ」/メモリ位置で一度に 1 つずつ操作を行うことで、命令の実行をシミュレートします。

また、エミュレートしようとしているデバイスの I/O に関する情報を見つける必要があります。たとえば、特定のボタンからの入力を表すポートまたはメモリの場所、画面を表すアドレスなどです。新しいデバイスでは (ただし、一般的には古いもののほとんどではありません)、エミュレートする必要がある別のグラフィックプロセッサもあります。そのプロセッサ自体をエミュレートするだけでなく、メイン CPU への接続方法もエミュレートする必要があります。

于 2012-06-21T18:22:04.330 に答える