开源网址:
https://github.com/xboot/libxnes
https://gitee.com/xboot/libxnes
编译了一个windows版,可以命令行执行,或者直接将rom拖到xnes即可运行
xnes.7z
离线
大侠的时间都哪里来的,难道是财富自由后的兴趣爱好?
离线
放弃大好国庆,将去年写的半拉子工程,硬肝了一下。期待同志们,在各种平台各显神通,顺便检验libxnes的可移植性。
最近编辑记录 xboot (2024-10-08 11:47:34)
离线
添加对mapper 66的支持,因140跟66比较接近,也顺便一起支持了
https://gitee.com/xboot/libxnes/blob/master/src/mapper66.c
https://gitee.com/xboot/libxnes/blob/master/src/mapper140.c
离线
大佬精力无限,羡慕赚钱养家之外还能有时间搞业余爱好的人
离线
xman出品必属精品,膜拜大佬!
离线
大佬精力无限,羡慕赚钱养家之外还能有时间搞业余爱好的人
其实除了精力,最主要还是能力问题!我是精力无限,奈何能力有限啊!=D
离线
大佬太强了,前排围观学习下
离线
大佬window_context_update()函数里的缩放与拉伸处理何不交给SDL_BlitSurface()来处理呢?
那两个NULL参数是源矩形和目标矩形,可以自动缩放拉伸的。surface底层是directdraw可以硬件加速的。
改成SDL_UpdateTexture和SDL_RenderCopy组合也能获得硬件加速。
离线
各种mapper是有标准的吗?还是全靠逆向分析出来的?
离线
各种mapper是有标准的吗?还是全靠逆向分析出来的?
离线
各种mapper是有标准的吗?还是全靠逆向分析出来的?
mapper资料网上很齐全,NES已经被研究很彻底了,现在开发有很多现成的资源可以捡。
楼上有mapper连接,这些mapper要支持全,挑战性不小,有点哭笑不得的事,不少mapper就几个游戏,甚至有些mapper就只有一个游戏,投入产出不成正比。
最近编辑记录 xboot (2024-10-09 17:58:07)
离线
关于图像拉升缩放,这个对于NES用传统的拉伸缩放算法,对于像素级游戏简直就是灾难,有很多缩放算法专门针对像素级游戏的,这些都值得深入研究。
离线
armstrong 说:各种mapper是有标准的吗?还是全靠逆向分析出来的?
好全的nes资料啊,多谢分享
离线
@xboot
确实如此,mapper基本上是游戏厂家在卡带中扩展出来的,甚至就是为个别游戏而设计的,没有通用性可言;游戏没有玩家就完全没必要折腾了。
离线
关于图像拉升缩放,这个对于NES用传统的拉伸缩放算法,对于像素级游戏简直就是灾难,有很多缩放算法专门针对像素级游戏的,这些都值得深入研究。
缩放算法确实很多,街机模拟器中有很多缩放选项。SDL内置的是线性插值算法,看起来比直接方块放大要好一点。
离线
真的很牛 赞一个 居然是xboot作者 有空了可以复刻个掌机出来
离线
现在的实现,虽说是精确到每一个指令的准确周期,但每一条指令都是原子化的,这就意味着,要么不干活,要干就干完,但实际情况,并不是这样,比如一条指令需要多个周期,取指周期,译码周期,执行周期,访问内存周期,跨页周期,条件跳转判断周期,每个周期都需要干特别的事情,说白了点,就是现在的实现粒度不够细,(当然对于模拟器也没必要特别细,比如精确到电路的电平及时序这种级别)。之所以会思考粒度问题,就是因为测试发现,nesdev网站上的那些刁钻的测试rom,就专门针对这种情况而设计的,要想通过测试,就必须将原子化的指令拆分出各种过程,这个任务是当前的重点任务了,比起支持更多的mapper这些来说,显得更关键了点。
网上有完全精确的模拟器实现,但是效率太低,不太实用,这个粒度的细分就需要好好考究了,要分但又不能太细,需要做好折中。估计接下来一段时间会优先考虑这些问题,估计结构上会做较大变化了。
离线
为了增强代码的可读性,将卡带的读写接口进行拆分,拆分成完全独立的cpu总线读写以及完全独立的ppu总线读写,新接口如下:
uint8_t (*cpu_read)(struct xnes_ctx_t * ctx, uint16_t addr);
void (*cpu_write)(struct xnes_ctx_t * ctx, uint16_t addr, uint8_t val);
uint8_t (*ppu_read)(struct xnes_ctx_t * ctx, uint16_t addr);
void (*ppu_write)(struct xnes_ctx_t * ctx, uint16_t addr, uint8_t val);
void (*ppu_step)(struct xnes_ctx_t * ctx);
void (*apu_step)(struct xnes_ctx_t * ctx);
红白机系统里面有两条总线,一条是CPU总线,另一条是PPU总线,两者完全独立,CPU是无法直接访问PPU总线上的内容的,必须通过PPU的寄存器来间接访,因为PPU寄存器才8个,只靠这8个来通信效率肯定不太高,所有这8个寄存器里面又有个OAM DMA,可以通过DMA来提供通信效率。
顺便再导出一个ppu step接口,以及apu step接口,某些卡带里面带有音频扩展能力,虽然现在没实现,但先预留接口,增强扩展能力。
离线
nes模拟器难度很高,目前流行的模拟器都不算完美。他们运行在屏幕精灵特别多的画面时,会有卡滞和闪烁问题;再好的电脑性能都无用。
相比之下,反而后来的街机、掌机模拟器表现更佳。nes模拟器开发是极具挑战的高难度技术活。
离线
我常用的nes模拟器:fceux,Mesen,nestopia,NNNesterJ,Smynes,VirtuaNES,JNES。
离线
Mesen比较强大的,支持CRT滤镜,反射边框等等,但上这些效果,对显卡有点要求,集成显卡的机器,开这个感觉卡卡的
离线
贴一个倒带的演示视频,默认缓存30S,现在ppu部分占用内存较多,这个地方需要优化一下,降低对内存的要求。
离线
大佬太强了,能力不足学习不了。
只能玩玩移植。
离线
这个倒带功能很有创意啊!
用于制作一条命通关的视频,可以冒充游戏高手。
离线