目前,我正在用Java开发NES模拟器。我的6502核心可为99%的作品提供服务,除了一些小问题。问题是,我正在为NES模拟6502,但是我从未像对PS1,N64或DOS那样感兴趣。我一直想模仿一个控制台/系统,该控制台/系统除了在屏幕上绘制一些简单的2D精灵外,还可以做更多的事情,例如上述系统。
我想问的是:与6502相比,是什么使x86处理器难以模仿?我唯一能想到的就是庞大的x86指令集,而且x86仿真器必须针对效率(而不是代码的可读性)进行更多编程。我之所以这样问是因为我已经看过DosBox的源代码,并且与那里几乎所有的6502开源仿真器相比,DosBox的x86内核的源代码对我来说都是无法理解的。当所有处理器所做的只是查找一个操作码列表并系统地执行它们时,在复杂性上会有如此大的差异吗?
最佳答案
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并运行太空侵略者或galaga或上面的东西。 (嗯,太空入侵者是8080吗?)(Gameboy中使用z80派生词)。