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

File 视频游戏模拟器是如何工作的?,file,operating-system,emulation,game-engine,rom,File,Operating System,Emulation,Game Engine,Rom,我很好奇仿真器是如何工作的。它们是用什么写的?它必须模拟图形吗?人们如何将游戏上传为ROM?他们模拟系统操作系统吗?有几种模拟技术。第一种技术称为低级别仿真。在这种情况下,仿真器可以写成任何语言,但是由于二进制数据操作量大,C和C++可以很好地完成这样的任务,尽管有很多其他语言能够提供这样的.。 通过低级仿真,程序模拟了原始系统的精确硬件。例如,原始的NES具有官方文档和逆向工程信息中定义良好的硬件。我们确切地知道它基于6502的CPU以及图形、声音芯片等的行为。通过低级仿真,原始游戏的精确二进

我很好奇仿真器是如何工作的。它们是用什么写的?它必须模拟图形吗?人们如何将游戏上传为ROM?他们模拟系统操作系统吗?

有几种模拟技术。第一种技术称为低级别仿真。在这种情况下,仿真器可以写成任何语言,但是由于二进制数据操作量大,C和C++可以很好地完成这样的任务,尽管有很多其他语言能够提供这样的.</P>。 通过低级仿真,程序模拟了原始系统的精确硬件。例如,原始的NES具有官方文档和逆向工程信息中定义良好的硬件。我们确切地知道它基于6502的CPU以及图形、声音芯片等的行为。通过低级仿真,原始游戏的精确二进制数据在软件中的解释方式与原始硬件解释数据的方式完全相同。这包括为6502指令集编写的原始机器代码、图形数据、IO等等。通过调用现代图形和声音API将原始硬件的指令转换为现代硬件来模拟图形和声音硬件

这种技术是最精确和最成功的,但对于复杂的机器来说也是最慢的,有时也是最难实现的

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

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

在大多数形式的重新编译技术中都涉及到所谓的高级仿真。根据观察,大多数代码只是编译为调用操作系统或库C例程的代码。代码被重新编译到主机上,对原始操作系统和库(如图形和声音库)的调用将以本机方式重新实现,而不是模拟。例如,如果有一个在屏幕上绘制三角形的调用,仿真器可以直接执行操作,而不必模拟将draw命令与原始图形硬件通信的精确低级实现。这就是几乎所有的任天堂64和PlayStation模拟器的工作原理

最初的操作系统有时只需要重新实现。例如,任天堂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++,但是任何能够在运行时系统编程和低级代码接口的语言都能做到这一点。