プロセッサだけをエミュレートしますか、それともマシン全体をエミュレートしますか?
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