视频游戏模拟器如何工作?

时间:2012-06-15 23:46:33

标签: file operating-system emulation game-engine rom

我很好奇模拟器是如何工作的。他们写的是什么?是否必须模拟图形?人们如何将游戏上传为roms?他们是否模拟系统OS?

1 个答案:

答案 0 :(得分:8)

有几种仿真技术。第一种技术称为低级仿真。在这种情况下,模拟器几乎可以用任何语言编写,但是由于大量的二进制数据操作,C和C ++很适合这样的任务,尽管还有很多其他语言能够提供这样的任务。 / p>

通过低级仿真,程序可以模拟原始系统的确切硬件。例如,最初的NES具有良好定义的硬件,包括官方文档和逆向工程的信息。我们确切地知道其基于6502的CPU如何与图形,声音芯片等一起运行。通过低级仿真,原始游戏的确切二进制数据在软件中以与原始硬件解释数据完全相同的方式进行解释。这包括为6502指令集,图形数据,IO,所有内容编写的原始机器代码。通过调用现代图形和声音API来实现它们,将原始硬件的指令转换为现代硬件,从而模拟图形和声音硬件。

这种技术是最准确和最成功的,但也是复杂机器中最慢,有时也是最难实现的技术。

第二种方法称为静态重新编译。分析原始系统的原始机器代码,然后重新编译为现代计算机。这种技术可以实现最快的仿真,但成功率非常低。使用这种技术的模拟器最多只能支持一些演示和游戏。原因通常是原始软件期望的运行时环境以在编译时很难或不可能知道的方式发生变化。

最终的技术称为动态重新编译。在这种技术中,模拟器分析代码并在运行时重新编译它。这允许编译器根据程序运行时可用的信息,将运行时环境定制为原始软件所期望的内容。

大多数形式的重新编译技术都涉及高级仿真。这是观察到大多数代码只是代码编译以调用操作系统或库C例程。代码被重新编译到主机,并且对原始操作系统和库的调用(例如图形和声音的调用)将在本地重新实现,而不是被模拟。例如,如果调用在屏幕上绘制三角形,则模拟器可以直接执行操作,而无需模拟将绘图命令传送到原始图形硬件的确切低级实现。这就是几乎所有Nintendo 64和PlayStation仿真器的工作方式。

原始操作系统有时只需要重新实现。例如,Nintendo 64实际上没有操作系统,每个盒式磁带本身就是它自己的操作系统。然而,仿真器识别所有ROM实现并动态捕获并重新实现它们的常见例程。然而,PlayStation有一个专有的BIOS,用于设置基本硬件和从CD读取游戏。仿真器必须拥有此BIOS的副本或尝试重新实现其功能。

我们知道使用动态重新编译的模拟器已在内部实现,例如Xbox 360,以便播放原始的Xbox游戏。对于外部开发人员来说,这样的任务将非常困难,但对于拥有所有原始和专有文档以及创建和优化此类仿真器的人力的Microsoft来说,这样做更为简单。在这种情况下,不需要模拟整个原始Xbox操作系统,但原始游戏对原始操作系统的调用必须转换为本机操作系统。 Xbox One模拟Xbox 360的技术是类似的,除了为了在仿真中与Xbox 360游戏具有更大程度的兼容性,他们选择在他们的模拟器中运行原始的Xbox 360操作系统。

来自游戏卡带的游戏通过专为ROM转储而设计的硬件移动到计算机上。旧机器上的ROM实际上表现得非常简单。它们具有地址输入线和数据输出线。可以使用微控制器构建设备以转储这些ROM,然后使用串行,USB或其他方法将它们传送到计算机。有些ROM甚至可以通过计算机的可编程并行端口读取,在现代PC中很少见,但存在USB适配器。

由于大量动态代码生成,使用重新编译技术的仿真器几乎只使用C或C ++,但是任何能够在运行时进行系统编程和低级代码接口的语言都能够做到这一点。