我正在使用支持 fpu 的 266 Mhz 和 32 MB RAM 的 ARM 9 处理器,我在上面运行 linux。我想在 pc 上模拟它(我在 pc 上有 linux 和 windows 可用)。我想分析我的循环计数,直接在模拟器中运行我的交叉编译的可执行文件。是否有任何可用于轻松创建模拟器的开源项目,我需要编写多少更改/代码/努力才能使用它制作自定义模拟器?如果您为我提供教程或其他参考资料以帮助我快速入门,那就太好了。
感谢和问候,
晴天。
我正在使用支持 fpu 的 266 Mhz 和 32 MB RAM 的 ARM 9 处理器,我在上面运行 linux。我想在 pc 上模拟它(我在 pc 上有 linux 和 windows 可用)。我想分析我的循环计数,直接在模拟器中运行我的交叉编译的可执行文件。是否有任何可用于轻松创建模拟器的开源项目,我需要编写多少更改/代码/努力才能使用它制作自定义模拟器?如果您为我提供教程或其他参考资料以帮助我快速入门,那就太好了。
感谢和问候,
晴天。
你想只模拟处理器还是整台机器?
模拟 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
你应该看看QEMU。但是我不明白,你为什么需要一个完整的模拟器?
您已经可以在没有模拟器的情况下进行很多分析。您期望拥有系统仿真器的好处是什么?