1

fpuサポートと32 MB RAMを備えた266 MhzのARM 9プロセッサで作業しています.Linuxを実行しています.PCでエミュレートしたいです(PCでLinuxとWindowsの両方を利用できます)。サイクル カウントをプロファイリングし、クロスコンパイルした実行可能ファイルをエミュレータで直接実行したいと考えています。エミュレータを簡単に作成できるオープンソース プロジェクトはありますか?それを使用してカスタム エミュレータを作成するには、どれだけの変更/コード/労力を記述する必要がありますか? キックスタートするためのチュートリアルやその他のリファレンスを提供していただければ幸いです。

ありがとうございます。それでは、お元気で、

晴れ。

4

2 に答える 2

4

プロセッサだけをエミュレートしますか、それともマシン全体をエミュレートしますか?

CPUのエミュレートは非常に簡単です。すべてのCPUレジスタを含む構造を定義し、RAMをシミュレートする配列を作成してから、次のようにエミュレートします。

    cpu_ticks = 0;  // counter for cpu cycles 

    while (true) {

      opcode = RAM[CPU.PC++]; // Fetch opcode and increment program counter

      switch (opcode) {

        case 0x12: // invented opcode for "MOV A,B"
          CPU.A = CPU.B;
          cpu_ticks += 4; // imagine you need 4 ticks for this operation
          set_cpu_flags_mov();
          break;

        case 0x23: // invented opcode for "ADD A, #"
          CPU.A += RAM[CPU. PC++]; // get operand from memory
          cpu_ticks += 8;
          set_cpu_flags_add();
          break;

        case 0x45: // invented opcode for "JP Z, #"
          if (CPU.FLAGS.Z) CPU.PC=RAM[CPU.PC++]; // jump
          else CPU.PC++; // continue
          cpu_ticks += 12;
          set_cpu_flags_jump();
          break;
        ...
      }

      handle_interrupts();

    }

マシン全体をエミュレートするのははるかに困難です...LCDコントローラー、メモリマップドレジスタ、メモリバンクコントローラー、DMA、入力デバイス、サウンド、I / Oのものをエミュレートする必要があります...また、おそらくBIOSからのダンプが必要です。オペレーティングシステム...ARMプロセッサはわかりませんが、パイプラインやキャッシュなどがあると、タイミングがより複雑になります。

すべてのハードウェアパーツが完全に文書化されている場合は問題ありませんが、リバースエンジニアリングする必要がある場合、またはエミュレートされたマシンがどのように機能するかを推測する必要がある場合は、苦労します。

http://infocenter.arm.com/help/index.jspから開始し、プロセッサの「テクニカルリファレンスマニュアル」をダウンロードします。

また、一般的なエミュレーションの質問については、http ://www.google.es/search?q = how + to + write + an + emulator

于 2009-09-28T07:40:31.703 に答える
2

QEMUを見てください。わかりませんが、なぜ完全なエミュレーターが必要なのですか?

エミュレータがなくても、すでに多くのプロファイリングを行うことができます。システム エミュレーターを使用することで、どのようなメリットが期待できますか?

于 2009-09-28T09:49:39.183 に答える