3

目前,我正在用 Java 制作 NES 模拟器。除了一些小问题外,我的 6502 核心可以工作 99%。问题是,我正在为 NES 模拟 6502,但我从未像对 PS1、N64 或 DOS 那样对它感兴趣。我一直想模拟一个控制台/系统,它能够做的不仅仅是在屏幕上绘制一些简单的 2D 精灵,比如前面提到的系统。

我想问的是:与 6502 相比,是什么让 x86 处理器难以模拟?我唯一能想到的是庞大的 x86 指令集,并且 x86 仿真器必须对效率进行更多编程,而不是代码的可读性。我问这个是因为我查看了 DosBox 源代码,并且与几乎所有的 6502 开源模拟器相比,DosBox 的 x86 核心的源代码对我来说甚至都无法理解。当一个处理器所做的只是查找操作码列表并系统地执行它们时,为什么会有如此大的复杂性差异?

4

2 回答 2

4

6502 和 8088/86 会有些相似,都是 CISC 等。x86 有更多指令,但像 6502 一样只是主题的变体。

如果您谈论的不仅仅是 DOS 仿真器,例如 80386 或更新版本,那么是的,这是一个更大的努力。不仅是处理器,还有系统。一个基于 6502 的游戏系统周围没有太多东西,通常特定于平台、小行星、nes、c64 等。你需要拿出一个 bios,然后是一个 dos,我相信在这一点上是免费在那里。还有很多8086系统拥有/拥有的外设,视频,硬盘等。

许多 dos 应用程序会直接与硬件对话,因此您必须做的不仅仅是模拟 bios 调用。

将所有这些加起来,dos/x86 系统的工作量远远超过 6502。

您不必再创建一个专为提高效率而设计的仿真器(例如,对于 dos)。您正在查看的资源(MAME 是一堆处理器模拟器的好资源)最有可能是为提高速度而设计的,而且许多资源几乎不可读。

从任何角度来看,x86 都是一个痛苦的指令集。如果 6502 是你到目前为止所做的一切,我会选择其他的,除非很明显如何去做(听起来好像不是)。可能是固定长度的指令集,如 arm 或 mips(以及固定长度的版本)。或者为了了解规模,做一个 z80 并在上面运行太空入侵者或 galaga 或其他东西。(嗯,太空侵略者是 8080 吗?)(z80 衍生产品在 gameboy 中)。

于 2013-07-28T21:13:31.393 回答
2

正如您提到的,x86 具有相当广泛的指令集。具有 5 个寄存器和 50 条奇怪指令的微型 8 位微处理器(如 6502)与支持 CPU(如 x86)的粗糙、陈旧、32 位、多用户操作系统之间存在天壤之别。

x86 处理器更复杂,因为它们:

  • 是 CISC 意味着许多指令执行可能需要许多周期的复杂事情。

  • 倾向于支持 FPU

  • 具有多级缓存

  • 有一个预取输入队列

  • 有很多向后兼容性支持

  • 支持分页

  • 多个权限级别

于 2013-07-28T20:09:13.293 回答