2013-07-28 48 views
3

目前,我正在Java中制作一个NES模拟器。除了一些小问题,我的6502内核可以使用99%。问题是,我正在模拟NES的6502,但我从来没有像PS1,N64或DOS那样对它感兴趣。我一直想仿效一个控制台/系统,它能够做的比在屏幕上绘制一些简单的2D精灵更有效,就像前面提到的系统一样。与类似6502的东西相比,模拟类似x86架构的东西时会出现什么问题?

我想问的是:与6502相比,什么让x86处理器难以仿真?我能想到的唯一的事情就是庞大的x86指令集,而且x86仿真器必须更高效地编程,而不是代码的可读性。我这样问是因为我查看了DosBox源代码,并且与几乎任何6502开源模拟器进行了比较,DosBox的x86内核的源代码对我来说甚至是远远不能理解的。当所有的处理器都在查找一个操作码列表并且系统地执行它们的时候,复杂性如此之大?

回答

4

6502和8088/86会有些类似,都是CISC等。x86有更多的说明,但是像6502只是一个主题的变体。

如果你谈论的不仅仅是一个像80386或更新的DOS模拟器,那么是的这是一个更大的努力。不仅是处理器,还有系统。一个基于6502的游戏系统并没有太多的东西,通常是特定于平台,小行星,nes,c64等等。你需要想出一个bios然后是一个dos,我现在认为它是在那里免费。还有许多8086系统所拥有的外围设备,视频,硬盘等。

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

添加这一切并努力为DOS/x86系统上水平比6502

你不必创建一个仿真器是设计效率得多了,不再(适用于DOS的例)。您正在查看的源代码(MAME是一组处理器模拟器的良好源代码)是为极速设计的,而且很多都很难读取。

从任何方向看,x86都是一个痛苦的指令集。如果6502是你迄今为止所做的所有工作,我会选择其他的东西,除非它很明显该怎么做(它听起来像它不是)。也许是像arm或mips这样的固定长度指令集(以及固定长度版本)。或者为了获得规模感,做一个z80并且运行太空侵略者或者galaga或者其他东西。 (hmm是太空侵略者8080?)(一个z80衍生物在gameboy中)。

2

正如你所提到的,x86有一个相当广泛的指令集。微型8位微处理器与5个寄存器以及50个一些奇数指令(如6502)和一个支持x86的CPU的老式CISC 32位多用户操作系统之间存在着简单的差异。

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

  • 是CISC含义许多指令做,可能需要很多次复杂的事情。

  • 倾向于支持一个FPU

  • 已经多级高速缓存

  • 具有预取输入队列

  • 具有用于寻呼很多向后兼容支持

  • 支持

  • multipl e特权级别