目前,我正在使用Java制作NES模拟器。除了一些小问题,我的6502核心工作率为99%。问题是,我正在为NES模拟6502,但我从来没有像对PS1,N64或DOS这样的东西感兴趣。我一直想模仿一个控制台/系统,它能够做的不仅仅是在屏幕上绘制一些简单的2D精灵,就像前面提到的系统一样。
我想问的是:与6502相比,是什么让x86处理器难以模仿?我唯一能想到的是巨大的x86指令集,并且x86仿真器必须对效率进行更多编程,而不是代码的可读性。我问这个是因为我看过DosBox的源代码,并且几乎与任何6502开源仿真器相比,DosBox的x86核心源代码对我来说甚至都无法理解。当所有处理器都查找操作码列表并系统地执行它们时,如何在复杂性方面产生如此大的差异?
答案 0 :(得分:4)
如果你所说的不仅仅是一个类似于80386或更新版本的DOS模拟器,那么肯定是一个更大的努力。不仅是处理器,还有系统。一个基于6502的游戏系统并没有太多的围绕它,通常特定于平台,小行星,nes,c64等等。你需要提出一个BIOS然后一个dos,我相信在这一点上是在那里免费。还有许多8086系统拥有/拥有的外围设备,视频,硬盘等等。
许多dos应用程序会直接与硬件对话,因此您必须做的不仅仅是模拟bios调用。
添加所有这些并且dos / x86系统的工作量远远超过6502.
您不必创建一个效率设计的仿真器,而不再是(例如dos)。你正在寻找的源(MAME是一堆处理器模拟器的良好来源)是为极速设计的,而且许多几乎不可读。
x86是一个痛苦的指令集,从你看到它的任何方向。如果6502就是你到目前为止所做的一切,我会选择其他的东西,除非很明显该怎么做(听起来不是这样)。也许是一个固定长度的指令集,如arm或mips(以及固定长度版本)。或者为了了解比例,做一个z80并运行太空入侵者或galaga或其他东西。 (嗯是太空入侵者8080?)(z80衍生物在游戏中)。
答案 1 :(得分:2)
正如您所提到的,x86具有相当广泛的指令集。微型8位微处理器有5个寄存器和50个奇怪的指令(如6502)和老式的,老化的,CISC,32位,多用户操作系统支持CPU,就像x86一样,只有一个区别。
x86处理器更复杂,因为它们:
是CISC意味着许多指令会做很复杂的事情,可能需要很多周期。
倾向于支持FPU
有多级缓存
有一个预取输入队列
有很多向后兼容性支持
支持分页
多个权限级别