1个不稳定版本
0.1.0 | 2020年5月2日 |
---|
156 在 模拟器 中排名 #156
232 每月下载量
用于 gdbstub
4MB
2K SLoC
armv4t_emu
ARMv4T指令集的模拟器,使用Rust编写。
最初作为 iburinoc的Gameboy Advance模拟器 的一部分编写,现在是一个独立的库,可用于任何可能需要它的项目中!
目前,该软件包的功能几乎完整,可以成功运行大型程序。请参阅问题跟踪器以获取缺失/不完整功能的列表。
示例
use armv4t_emu::{reg, Cpu, ExampleMem, Mode, Memory};
let prog = &[
0x06, 0x00, 0xa0, 0xe3, // mov r0, #6
0x01, 0x10, 0xa0, 0xe3, // mov r1, #1
0x01, 0x10, 0x81, 0xe0, // l: add r1, r1, r1
0x01, 0x00, 0x50, 0xe2, // subs r0, #1
0xfc, 0xff, 0xff, 0x1a, // bne l
0x01, 0x6c, 0xa0, 0xe3, // mov r6, #0x100
0x00, 0x10, 0x86, 0xe5, // str r1, [r6]
0xf7, 0xf0, 0xde, 0xad // ; trigger undefined instr exception
];
let mut mem = ExampleMem::new_with_data(prog);
let mut cpu = Cpu::new();
cpu.reg_set(Mode::User, reg::PC, 0x00);
cpu.reg_set(Mode::User, reg::CPSR, 0x10);
while cpu.step(&mut mem) {}
assert_eq!(64, mem.r32(0x100));
可选功能
有几个可选功能您可能想启用,提供各种功能/调试增强。这些功能默认禁用,因为它们会增加编译时间。
功能 | 描述 |
---|---|
advanced_disasm |
使用 capstone 反汇编并记录指令。警告:会显著增加编译时间。 |
serde |
在重要的类型/结构上添加了 Serialize 和 Deserialize 衍生。 |
* 考虑使用 gdbstub
软件包来调试模拟代码,而不是创建一个专门的应用程序调试器。
缺失的功能
目前,该软件包的功能主要取决于其依赖项目的功能。因此,ARMv4T指令集的几个功能目前尚未实现。