扔一个的渣渣NES模拟器

IRQ_CRASH 2015-10-23 11:00:19

这个东西搞了很久,花去了很多业余时间。草稿性质的代码。越写到最后越感觉自己开始没想怎么构建写到最后就跟跎翔一样。不想在弄了代码扔了也还算可惜,保存一下顺便水一贴。准备重新撸了.(C语言写的使用了GL/DX/GDI 借鉴了virtuanes/nesterj的代码 没有声音,只支持nrom-256)。。
...全文
233 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
IRQ_CRASH 2015-10-24
  • 打赏
  • 举报
回复
引用 8 楼 mLee79 的回复:
就 NES 那还不到 QVGA 的分辨率, 用啥都慢不了啊, 我在 Tegra2 的板子上跑测试都刷了 200+fps ..


因为以后会逐渐开这种窗口,这种扩展辅助的窗口我觉得才是真正有意思的地方。
mLee79 2015-10-24
  • 打赏
  • 举报
回复
就 NES 那还不到 QVGA 的分辨率, 用啥都慢不了啊, 我在 Tegra2 的板子上跑测试都刷了 200+fps ..
IRQ_CRASH 2015-10-24
  • 打赏
  • 举报
回复
引用 5 楼 mLee79 的回复:
用啥引擎的, infoNES 么,以前我弄了个跑 ARM 上. 这东西有必要用 DDraw, D3D 么, 我用 GDI 画, 在我本子上也能跑 400+ fps.
这个渣渣例程速度还凑合,每帧时间片没跑偏的情况下1ms都没用到,我在考虑怎么用剩下的时间做更多有用的事情,(比如Filter滤波,自绘PPU状态图UI,寄存器观察图表,这几个窗口基本设想都是要占大半个屏幕的),这种东西以后会有很多,不用direct很难想象帧数。即使是原始的dx9 surface 在LOCK_BUFFER + SSE movdqa 在全屏写入的时候要比GDI快上 5~6倍左右。要是用GDI,估计会惨不忍睹(主显示屏幕使用GDI还蛮强凑合我想。。。。至于你说的infoNES,没有用过我是看了模拟器源代码写出来的(或多或少点virtuanes/nesterj的影子0_0)
IRQ_CRASH 2015-10-24
  • 打赏
  • 举报
回复
引用 4 楼 dustpg 的回复:
[quote=引用 3 楼 u013550545 的回复:] [quote=引用 2 楼 dustpg 的回复:] 前排占座, 自己也写了个, 5个月没更新了, 只完成了指令模拟。 话说C语言用COM组件会不会很麻烦啊.
dx头文件有个简化调用的宏可以隐藏vtbl调用。。其余的就是多传一个this指针的事情了。dx到了xact之前版本的header都会保留这组宏,全是用c源文件编译的。倒不是闲的蛋疼。pc机配置低不给力。cpp编译速度太慢了,本身vs就卡。里面的cpu是用汇编写的。ppu也不难。ppu有两种模拟方式一种是粗浅的模拟ntsc下约113 cycles画一帧线 240根时候提交渲染,之后就是vblank和nmi中段处理。另外一种是根据ppu的具体周期来写精灵读nt at等这种方法比较难理解速度也慢但是模拟精度高。apu和mapper都没怎么看。。整个过程最让我意外的就是以jit方式模拟的nes在全屏下使用gdi渲染的时候也很流畅 。[/quote] 编译速度倒是没什么,因为核心没用第三方库, 标准库也是仅仅几个必要的, 编译速度哧溜溜的和hello world一样. 因为目标是跨平台所以到是没用汇编. 唉, 说得我又想继续搞了, 挖坑太多了[/quote]neswiki上面有很多资料,国内基本折腾这些东西的人还在少数
mLee79 2015-10-24
  • 打赏
  • 举报
回复
用啥引擎的, infoNES 么,以前我弄了个跑 ARM 上. 这东西有必要用 DDraw, D3D 么, 我用 GDI 画, 在我本子上也能跑 400+ fps.
dustpg 2015-10-24
  • 打赏
  • 举报
回复
引用 3 楼 u013550545 的回复:
[quote=引用 2 楼 dustpg 的回复:] 前排占座, 自己也写了个, 5个月没更新了, 只完成了指令模拟。 话说C语言用COM组件会不会很麻烦啊.
dx头文件有个简化调用的宏可以隐藏vtbl调用。。其余的就是多传一个this指针的事情了。dx到了xact之前版本的header都会保留这组宏,全是用c源文件编译的。倒不是闲的蛋疼。pc机配置低不给力。cpp编译速度太慢了,本身vs就卡。里面的cpu是用汇编写的。ppu也不难。ppu有两种模拟方式一种是粗浅的模拟ntsc下约113 cycles画一帧线 240根时候提交渲染,之后就是vblank和nmi中段处理。另外一种是根据ppu的具体周期来写精灵读nt at等这种方法比较难理解速度也慢但是模拟精度高。apu和mapper都没怎么看。。整个过程最让我意外的就是以jit方式模拟的nes在全屏下使用gdi渲染的时候也很流畅 。[/quote] 编译速度倒是没什么,因为核心没用第三方库, 标准库也是仅仅几个必要的, 编译速度哧溜溜的和hello world一样. 因为目标是跨平台所以到是没用汇编. 唉, 说得我又想继续搞了, 挖坑太多了
苦逼码农 2015-10-24
  • 打赏
  • 举报
回复
引用 8 楼 mLee79 的回复:
就 NES 那还不到 QVGA 的分辨率, 用啥都慢不了啊, 我在 Tegra2 的板子上跑测试都刷了 200+fps ..
http://bbs.csdn.net/topics/391846638 高手帮忙看看帖子,多谢
IRQ_CRASH 2015-10-23
  • 打赏
  • 举报
回复
引用 2 楼 dustpg 的回复:
前排占座, 自己也写了个, 5个月没更新了, 只完成了指令模拟。 话说C语言用COM组件会不会很麻烦啊.
dx头文件有个简化调用的宏可以隐藏vtbl调用。。其余的就是多传一个this指针的事情了。dx到了xact之前版本的header都会保留这组宏,全是用c源文件编译的。倒不是闲的蛋疼。pc机配置低不给力。cpp编译速度太慢了,本身vs就卡。里面的cpu是用汇编写的。ppu也不难。ppu有两种模拟方式一种是粗浅的模拟ntsc下约113 cycles画一帧线 240根时候提交渲染,之后就是vblank和nmi中段处理。另外一种是根据ppu的具体周期来写精灵读nt at等这种方法比较难理解速度也慢但是模拟精度高。apu和mapper都没怎么看。。整个过程最让我意外的就是以jit方式模拟的nes在全屏下使用gdi渲染的时候也很流畅 。
dustpg 2015-10-23
  • 打赏
  • 举报
回复
前排占座, 自己也写了个, 5个月没更新了, 只完成了指令模拟。 话说C语言用COM组件会不会很麻烦啊.
IRQ_CRASH 2015-10-23
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/u013550545/9208049米娜来接分吧~~~

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧