最近我发现很多模拟器都很慢,因为它们不仅需要模拟CPU,还要模拟模拟设备的内存.当设备具有内存映射I/O,虚拟内存或仅未使用的地址空间时,必须在软件中模拟每个内存访问.
如果操作系统通过虚拟内存为我们这样做,我觉得它可能会快得多.为了简单起见,我将使用Game Boy仿真作为示例,但显然这种方法对于更新,更强大的机器会更好.
Game Boy记忆图大致是:
因此,传统的模拟器必须转换每个内存访问,如:
if(addr < 0x4000) return rom[addr];
else if(addr < 0x8000) return rom[(addr - 0x4000) + (0x4000 * cur_rom_bank)];
else if(addr < 0xA000) {
if(vram_accessible) return vram[addr - 0x8000];
else return 0xFF;
}
else if(addr < 0xC000) return saveram[addr - 0xA000];
else …Run Code Online (Sandbox Code Playgroud)