与6502相比,在模拟x86体系结构时会出现什么问题?

与6502相比,在模拟x86体系结构时会出现什么问题?,x86,dos,cpu,emulation,6502,X86,Dos,Cpu,Emulation,6502,目前,我正在用Java制作一个NES模拟器。除了一些小问题外,我的6502核心可以工作99%。问题是,我正在为NES模拟6502,但我从来没有像对PS1、N64或DOS这样的产品那样对它感兴趣。我一直想模拟一个控制台/系统,它能够做的不仅仅是在屏幕上绘制一些简单的2D精灵,就像前面提到的系统一样 我想问的是:与6502相比,是什么让x86处理器这样的东西难以模仿?我唯一能想到的就是庞大的x86指令集,x86仿真器的编程必须更加高效,而不是代码的可读性。我问这个问题是因为我看过DosBox的源代码

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


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

正如您所提到的,x86有一个相当广泛的指令集。拥有5个寄存器和50条指令(比如6502)的小型8位微处理器与支持CPU(比如x86)的简陋、陈旧、CISC、32位、多用户操作系统之间有着天壤之别

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

  • CISC意味着许多指令执行复杂的操作,可能需要许多周期

  • 倾向于支持FPU

  • 具有多级缓存

  • 有一个预取输入队列

  • 有很多向后兼容性支持

  • 支持分页

  • 多个特权级别


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

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

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

加上所有这些,dos/x86系统的工作级别远远超过6502

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

从任何角度来看,x86都是一个痛苦的指令集。如果6502是你目前为止所做的全部,我会选择下一步做别的事情,除非它是如何做的(听起来好像不是)。可能是固定长度的指令集,如arm或mips(以及固定长度版本)。或者,为了获得规模感,做一个z80,在上面运行“太空入侵者”或“加拉加”之类的东西。(嗯,太空入侵者是8080吗?)(游戏机里有z80的衍生物)