7

可能重复:
模拟器如何工作以及它们是如何编写的?

我想尝试编写一个基本的游戏机模拟器,甚至可能是 NES。我知道 C 的基础知识,而且我相当擅长 Java,所以我知道必要的编程基础知识。但我不知道的是,人们如何将所有数据处理成 C 程序并从中创建一个模拟器。我知道我应该从源代码中学习,但是在不知道它们为什么存在以及它们应该做什么的情况下,很难看到一堆代码行。如果我想学习如何编写这样的模拟器,我应该从哪里开始?

我已经搜索了互联网,但我只发现了包含太多错误的不清楚的教程,无法自行解决。我应该从哪里开始?

4

3 回答 3

7

你没有。你模仿硬件。您根本不必“处理”程序数据,您需要编写模仿 CPU、图形硬件、输入设备等的代码。

一个好的第一步可能是编写一个 Z-Machine 模拟器,虽然它不是控制台,但它实际上是第一个广泛使用的“模拟器”。它被用于所有的信息通信文本冒险(zork 等)。由于它是一种面向文本的游戏格式,在图形或声音方面没有太多可以模仿的东西,唯一的输入设备是键盘,您不必担心执行速度/同步。

这里有很好的记录:http ://www.gnelson.demon.co.uk/zspec/preface.html

这实际上是我打算在这些日子里自己承担的一个项目,只是一直没有找到时间。

于 2012-06-21T18:20:32.817 回答
2

您可能首先收集有关要模拟的硬件的信息。CPU 可能是最大的一块,也是最容易获得的,所以这是一个合理的起点。

CPU 仿真器基本上读取程序的字节,解码各个指令并执行它们。您通常会分配一个大数组来表示设备的内存,并分配一些变量来表示 CPU 的寄存器。您可以通过在这些“寄存器”/内存位置上一次执行一项操作来模拟指令的执行。

您还必须在您尝试模拟的设备上找到有关 I/O 的信息——例如,代表来自特定按钮的输入的端口或内存位置,哪些地址代表屏幕等。在较新的设备上 (但通常不是大多数较旧的处理器)您还需要模拟一个单独的图形处理器。您不仅需要模拟该处理器本身,还需要模拟它与主 CPU 的连接方式。

于 2012-06-21T18:22:04.330 回答
2

控制台模拟器是一个非常大的项目,我预测它不会很有趣。在任何游戏开始运行之前,您都必须准备好很多东西。

找到一个试图模拟控制台的现有开源项目可能会更有趣,看看你是否能找到任何改进它的方法。

但是如果你只是在寻找一个很有教育意义的项目,我还有一个建议:写你自己的 Scheme 解释器,或者写你自己的 FORTH 解释器。这两种语言都是最小的、优雅的语言(并且都具有非主流的语法规则!)。您可以从头开始编写自己的 Scheme 或 FORTH,并在几天内运行程序。

这些不是玩具,编写它们将具有教育意义。

想象一下:获取一份 SICP[1] 并在您自己编写的系统中运行程序!或者得到一本 FORTH 书的副本并在你自己编写的系统上解决问题!

如果你对这些项目感兴趣,谷歌搜索“写一个 Scheme 解释器”和/或“写一个 FORTH 解释器”。

PS 当我第一次开始使用计算机时,我花了很多时间在 FORTH 中进行编程,它教会了我很多东西。这些年来,我从中学到的教训一直帮助我。

[1] http://sicpebook.wordpress.com/

于 2012-06-21T18:53:51.800 回答