[闲聊] 任天堂红白机模拟器专案重启

楼主: erspicu (.)   2016-10-25 01:48:45
纯拉赛文...轻松看就好
https://youtu.be/JDWlDcBtvmU
由于PC模拟器写到后来撞墙,没了动力,主要是周边装置IO文件看得不是很懂,
又非电子系所毕业,硬件不太行,K了很吃力,后来就没进度先放著.....
(INTEL真的出一堆数字编号的控制器芯片..)
趁著这个空档突然想起以前写过的任天堂红白机模拟器(其实完成度根本啥都称不上),
想把这旧专案重启整个重新大更新,回去找以前的code,因为觉得没啥参考价值,
没放出来到网络上,所以档案没备份好,只剩下CPU code这块,
就利用这仅存的部分继续完成,反正之前的东西砍掉也没差.
红白机模拟器好不好写? 真的建议初学者写gb来练习比较好,
相比下nes的真的比较有挑战性.
如果你只是要一个体验,没打算实作到一定的完整度,是也可以考虑nes,
最简单的处理方式就是找mapper0 而且画面没有scrolling的rom来测试,
Donkey Kong是很适合的游戏,只要固定在画面更新时一次性把整个背景和sprites
绘出来就好,但这只能够让部分游戏看起来好像有一个样子,
真正说起来nes难是难在透过正确的timing,在正确的时间下一条一条去输出scanlie,
然后不管是画面输出或是对PPU的内存进行读写都会跟 buff 的处理方式有关系,
内部还有暂存器会在特定的时间点更新,错了一个环节画面可能就错乱掉了
(特别牵涉到 x y的scrolling这种游戏).
其实nes撰写有点超过我的能力(我本来悟性就不高...),
这次重启专案主要目的就是希望可以让timing正确一点,
至少可以处理到有scrolling特效游戏,用比较合乎常规的方式去达成,
而不是乱做一个样子,但颇为困难,所以不得以最后借助两款open专案,
https://github.com/scottferg/Fergulator
这款我主要是参考它timing的方式以及每行scanlie的正确处理,
我主要目的不是移植别人的东西,而是了解观念(虽然还是有问号 orz..),
重新用自己风格和想法撰写,因为我的是c#,这款是go,所以日后我专案放出来,
除非用心去找,不然是不太好看出参考的痕迹.
https://sourceforge.net/projects/mynes/
这款我主要是参考PPU内存读写牵涉到BUFF这块,同样都是C#专案,
有部分method的code接近,但在日后应该会用我自己的想法再度改写些.
至于timing为何不参考mynes这款,mynes是完成度我认为有95%的完美模拟器,
而它的timing完成度应该有99%正确性(数字自己乱估,不用太认真),
写法相当复杂,以学习性来说Fergulator理想很多,不得不推荐一下mynes这款模拟器,
不错,精确度和mapper可能比很多模拟器更好,网络上都有测试比较过.
这重启专案目前会再补足一些东西,应该是近期会释放出来,以学习跟教育为用途,
sprite0hit 跟 SpriteOverflow 尚未实作,sprite跟背景之间的穿透处理还没正确做完,
目前也还没游戏手把输入功能,code很乱需要整理和优化
(但即使还没优化效能目前很够用) , 最后就是super mario bros画面背景还有问题
orz...然后会想再多支援几个简单的mapper(可能真的只是支援很简单的几个mapper),
完成后会放上github.
最后谈到nes的耗费效能...其实现在的电脑不管是任何程式语言甚至是script language,
应该跑nes模拟器都没啥问题,连javascript跑起来也不差了...
效能瓶颈比较要注意的是画面显示这块会占用最多,至少你的显示方式,
在不做任何其他事情的时候,单纯只是显示静态画面要达到最好有2.300 fps为基准,
因为后续还要扣除掉模拟器的运作时间.画面特效处理等等,显示越快,
你能用的时间越充裕,目前我是在没code优化状态下还可以搭配XBRZ 5X
(xbrz 5x filter有出了...),而且这部分还是纯c#写的,都还ok,
但filter的部分有整个自己优化处理过了.
其实还想些一些东西,但真的模拟器难不是难在写出,而且好好地写好,
虽然兴趣广,但功能完善度东缺西缺的,应该会先补齐(如果可以的话).
作者: oginome (荻野目洋子)   2016-10-25 01:52:00
推erspicu大实作!
作者: superrockman (岩男)   2016-10-25 01:57:00
会写程式就已经很神了阿.....真的
作者: HiJimmy (å—¨ 吉米)   2016-10-25 02:58:00
最近都再用平板玩红白机~~
作者: conpo (狮子たちの旗)   2016-10-26 20:45:00
专业好文推!辛苦了

Links booklink

Contact Us: admin [ a t ] ucptt.com