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

5
我很好奇模拟器是如何工作的。它们是用什么编写的?它是否需要模拟甚至图形?人们如何将游戏作为ROM上传?他们是否模拟系统操作系统?
1个回答

12

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

使用低级仿真,程序模拟原始系统的确切硬件。例如,原始NES具有明确定义的硬件,包括来自官方文档和反向工程信息。我们确切地知道其基于6502的CPU以及图形、声音芯片等的行为。使用低级仿真,原始游戏的确切二进制数据以与原始硬件解释数据完全相同的方式在软件中解释。这包括为6502指令集编写的原始机器代码、图形数据、IO等。通过调用现代图形和声音API来翻译原始硬件的指令,以模拟图形和声音硬件。

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

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

最后一种技术称为动态重编译。在这种技术中,仿真器分析代码并在运行时重新编译它。这使编译器可以根据程序正在运行时可用的信息,使运行时环境适合于原始软件所期望的。

参与大多数重新编译技术的过程中,有一种称为高级模拟的东西。这是观察到大多数代码只是编译成调用操作系统或库C例程的代码。将代码重新编译为主机机器,并原生重新实现对原始操作系统和库的调用(例如用于图形和声音的库),而不是进行模拟。例如,如果有一个要在屏幕上画一个三角形的调用,那么仿真器可以直接执行该操作,而无需模拟将绘图命令传递给原始图形硬件的确切低级实现。这就是几乎所有任天堂64和PlayStation仿真器的工作方式。
原始操作系统只有在必要时才需要重新实现。例如,任天堂64实际上没有操作系统,每个游戏卡带本身都是其自己的操作系统。然而,仿真器识别出所有ROM都实现的常见例程,并动态地捕获并重新实现它们。然而,PlayStation具有用于设置基本硬件和从CD读取游戏的专有BIOS。仿真器必须拥有此BIOS的副本或尝试重新实现其功能。
我们知道,例如,Xbox 360内部已实现了使用动态重新编译的仿真器,以播放原始Xbox游戏。这对于外部开发人员来说是非常困难的任务,但对于拥有所有原始和专有文档以及创建和优化此类仿真器的人力资源的Microsoft来说则更简单。在这种情况下,不需要模拟整个原始Xbox操作系统,但是必须将原始游戏对原始操作系统进行的调用翻译成本地操作系统。 Xbox One模拟Xbox 360的技术类似,只是为了在仿真中具有更高的兼容性,他们选择在其仿真器中运行原始的Xbox 360操作系统。

通过专门设计的ROM转储硬件,游戏卡带中的游戏可以转移到计算机上。在旧型号的机器上,ROM实际上表现出非常简单的行为方式。它们有地址输入线和数据输出线。可以使用微控制器构建设备来转储这些ROM,然后使用串行、USB或其他方法将它们传输到计算机上。某些ROM甚至可以通过计算机的可编程并行端口读取,这在现代PC中大多数缺失,但是存在适配器可以支持USB。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接