您尚未登录。

楼主 # 2024-10-08 09:43:59

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

开源网址:
https://github.com/xboot/libxnes
https://gitee.com/xboot/libxnes

gitee.com_xboot_libxnes.png

编译了一个windows版,可以命令行执行,或者直接将rom拖到xnes即可运行
xnes.7z

离线

#1 2024-10-08 09:50:11

zzm24
会员
注册时间: 2018-05-07
已发帖子: 120
积分: 107

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

大侠的时间都哪里来的,难道是财富自由后的兴趣爱好?

离线

楼主 #3 2024-10-08 11:42:21

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

放弃大好国庆,将去年写的半拉子工程,硬肝了一下。期待同志们,在各种平台各显神通,顺便检验libxnes的可移植性。

最近编辑记录 xboot (2024-10-08 11:47:34)

离线

楼主 #5 2024-10-09 09:15:44

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

添加对mapper 66的支持,因140跟66比较接近,也顺便一起支持了
https://gitee.com/xboot/libxnes/blob/master/src/mapper66.c
https://gitee.com/xboot/libxnes/blob/master/src/mapper140.c


2_20241009-0915.png
1_20241009-0915.png

离线

#7 2024-10-09 11:03:23

jiaowoxiaolu
会员
注册时间: 2021-08-27
已发帖子: 44
积分: 60

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

大佬精力无限,羡慕赚钱养家之外还能有时间搞业余爱好的人

离线

#10 2024-10-09 14:46:31

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

xman出品必属精品,膜拜大佬!

离线

#11 2024-10-09 14:48:58

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

jiaowoxiaolu 说:

大佬精力无限,羡慕赚钱养家之外还能有时间搞业余爱好的人

其实除了精力,最主要还是能力问题!我是精力无限,奈何能力有限啊!=D

离线

#12 2024-10-09 15:11:18

geekchun
会员
注册时间: 2020-11-11
已发帖子: 70
积分: 5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

大佬太强了,前排围观学习下

离线

#13 2024-10-09 15:26:20

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

大佬window_context_update()函数里的缩放与拉伸处理何不交给SDL_BlitSurface()来处理呢?
那两个NULL参数是源矩形和目标矩形,可以自动缩放拉伸的。surface底层是directdraw可以硬件加速的。
改成SDL_UpdateTexture和SDL_RenderCopy组合也能获得硬件加速。

离线

#14 2024-10-09 15:38:18

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

各种mapper是有标准的吗?还是全靠逆向分析出来的?

离线

#15 2024-10-09 17:42:49

尼古拉斯黑球球
会员
注册时间: 2024-10-09
已发帖子: 1
积分: 0

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

armstrong 说:

各种mapper是有标准的吗?还是全靠逆向分析出来的?

可以参考这里https://www.nesdev.org/wiki/Mapper

离线

楼主 #16 2024-10-09 17:54:36

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

armstrong 说:

各种mapper是有标准的吗?还是全靠逆向分析出来的?

mapper资料网上很齐全,NES已经被研究很彻底了,现在开发有很多现成的资源可以捡。

楼上有mapper连接,这些mapper要支持全,挑战性不小,有点哭笑不得的事,不少mapper就几个游戏,甚至有些mapper就只有一个游戏,投入产出不成正比。

最近编辑记录 xboot (2024-10-09 17:58:07)

离线

楼主 #17 2024-10-09 18:01:18

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

关于图像拉升缩放,这个对于NES用传统的拉伸缩放算法,对于像素级游戏简直就是灾难,有很多缩放算法专门针对像素级游戏的,这些都值得深入研究。

离线

#18 2024-10-09 20:57:50

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

尼古拉斯黑球球 说:
armstrong 说:

各种mapper是有标准的吗?还是全靠逆向分析出来的?

可以参考这里https://www.nesdev.org/wiki/Mapper

好全的nes资料啊,多谢分享

离线

#19 2024-10-09 21:00:05

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

@xboot
确实如此,mapper基本上是游戏厂家在卡带中扩展出来的,甚至就是为个别游戏而设计的,没有通用性可言;游戏没有玩家就完全没必要折腾了。

离线

#20 2024-10-09 21:03:33

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

xboot 说:

关于图像拉升缩放,这个对于NES用传统的拉伸缩放算法,对于像素级游戏简直就是灾难,有很多缩放算法专门针对像素级游戏的,这些都值得深入研究。

缩放算法确实很多,街机模拟器中有很多缩放选项。SDL内置的是线性插值算法,看起来比直接方块放大要好一点。

离线

#23 2024-10-10 11:27:07

lidaliang
会员
注册时间: 2024-09-27
已发帖子: 7
积分: 2

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

真的很牛 赞一个 居然是xboot作者 有空了可以复刻个掌机出来

离线

楼主 #24 2024-10-11 09:16:08

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

现在的实现,虽说是精确到每一个指令的准确周期,但每一条指令都是原子化的,这就意味着,要么不干活,要干就干完,但实际情况,并不是这样,比如一条指令需要多个周期,取指周期,译码周期,执行周期,访问内存周期,跨页周期,条件跳转判断周期,每个周期都需要干特别的事情,说白了点,就是现在的实现粒度不够细,(当然对于模拟器也没必要特别细,比如精确到电路的电平及时序这种级别)。之所以会思考粒度问题,就是因为测试发现,nesdev网站上的那些刁钻的测试rom,就专门针对这种情况而设计的,要想通过测试,就必须将原子化的指令拆分出各种过程,这个任务是当前的重点任务了,比起支持更多的mapper这些来说,显得更关键了点。

网上有完全精确的模拟器实现,但是效率太低,不太实用,这个粒度的细分就需要好好考究了,要分但又不能太细,需要做好折中。估计接下来一段时间会优先考虑这些问题,估计结构上会做较大变化了。

离线

楼主 #25 2024-10-11 09:43:18

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

为了增强代码的可读性,将卡带的读写接口进行拆分,拆分成完全独立的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接口,某些卡带里面带有音频扩展能力,虽然现在没实现,但先预留接口,增强扩展能力。

离线

#26 2024-10-11 13:55:34

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

nes模拟器难度很高,目前流行的模拟器都不算完美。他们运行在屏幕精灵特别多的画面时,会有卡滞和闪烁问题;再好的电脑性能都无用。
相比之下,反而后来的街机、掌机模拟器表现更佳。nes模拟器开发是极具挑战的高难度技术活。

离线

#27 2024-10-11 14:02:13

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

我常用的nes模拟器:fceux,Mesen,nestopia,NNNesterJ,Smynes,VirtuaNES,JNES。

离线

楼主 #28 2024-10-11 20:38:14

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

Mesen比较强大的,支持CRT滤镜,反射边框等等,但上这些效果,对显卡有点要求,集成显卡的机器,开这个感觉卡卡的

离线

楼主 #29 2024-10-14 09:29:52

xboot
会员
注册时间: 2019-10-15
已发帖子: 692
积分: 434

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。


贴一个倒带的演示视频,默认缓存30S,现在ppu部分占用内存较多,这个地方需要优化一下,降低对内存的要求。

离线

#30 2024-10-15 08:43:03

网络孤客
会员
注册时间: 2022-06-09
已发帖子: 22
积分: 7

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

大佬太强了,能力不足学习不了。
只能玩玩移植。

离线

#31 2024-10-22 15:58:45

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: libxnes开源了,这是一款纯C99标准拥有超强的可移植性,可读性,可玩性的高精度NES模拟器库,纯手写打造,感兴趣的可以在这帖子里恰饭。

这个倒带功能很有创意啊!
用于制作一条命通关的视频,可以冒充游戏高手。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn