那些游戏模拟器是怎么实现的,比如最近上架 app store 的 delta - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rookiemaster
V2EX    程序员

那些游戏模拟器是怎么实现的,比如最近上架 app store 的 delta

  •  
  •   rookiemaster 2024-04-23 18:32:30 +08:00 5367 次点击
    这是一个创建于 603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    还有比如 yuzu 模拟器,他们是怎么实现的,有什么实现框架吗

    29 条回复    2024-04-25 09:30:43 +08:00
    dV9zZM1wROuBT16X
        1
    dV9zZM1wROuBT16X  
       2024-04-23 18:40:50 +08:00
    蹲,安装了 delta ,但想玩的拳皇跟恐龙快打没有 gba 格式的,怎么搞
    582033
        2
    582033  
       2024-04-23 19:19:50 +08:00
    @Flourite 下载恐龙快打的 rom 文件,用 ios 的文件管理器放到 delta 的目录里,打开 delta 找到这个 rom 文件运行
    ktqFDx9m2Bvfq3y4
        3
    ktqFDx9m2Bvfq3y4  
       2024-04-23 19:21:29 +08:00
    @582033
    尝试了很多 ROOM ,引起童年回忆,但:触摸没手感,有啥实体手柄可用吗
    dV9zZM1wROuBT16X
        4
    dV9zZM1wROuBT16X  
       2024-04-23 19:26:44 +08:00
    @582033 这种方法要有固定格式的比如.nes 等文件才行,我在 emulatorgames 里下载解压是一个目录,导不进去
    582033
        5
    582033  
       2024-04-23 19:35:32 +08:00   3
    模拟器害人不浅,模拟器-》 rg35xx-》 funkeys-》嘉立创打板
    fantastM
        6
    fantastM  
       2024-04-23 19:36:47 +08:00   1
    ScepterZ
        7
    ScepterZ  
       2024-04-23 19:56:20 +08:00
    @Flourite 这游戏有 gba 的吗,接机游戏的包一般都是一个压缩包。我感觉你可能没搞懂模拟器是在模拟什么

    Delta 是自苹果更改规定允许模拟器上架以来第一批登陆 AppStore 的模拟器之一。支持模拟 NES 、SNES 、Game Boy 、Game Boy Advance 、N64 和 Nintendo DS 游戏。
    seers
        8
    seers  
       2024-04-23 20:16:04 +08:00
    @Chad0000 我在狗东几十块钱买了个叫 SHANWAN 的手柄,可以模拟 xbox ,实测模拟器可用,手感还行
    gason406
        9
    gason406  
       2024-04-23 20:17:36 +08:00
    @Flourite #1 拳皇在 GBA 上只有 EX1 ( 99 ) EX2 ( 2000 )两部,恐龙快打是卡普空 CPS 上的,没有 gba ,而且大概是版权原因后续也没复刻到别的系统上过,感觉你需要补充一些背景知识
    levelworm
        10
    levelworm  
       2024-04-23 20:20:52 +08:00
    可以查一下 How to write an emulator
    danbai
        11
    danbai  
    PRO
       2024-04-23 20:23:00 +08:00
    用软件模拟硬件
    dV9zZM1wROuBT16X
        12
    dV9zZM1wROuBT16X  
       2024-04-23 21:04:27 +08:00
    Kumo31
        13
    Kumo31  
       2024-04-23 21:34:26 +08:00   8
    做一下南京大学的 PA 可以解答你所有疑惑,这只是大二的课: https://nju-projectn.github.io/ics-pa-gitbook/ics2024/index.html

    理解"程序如何在计算机上运行"的根本途径是从"零"开始实现一个完整的计算机系统. 南京大学计算机科学与技术系计算机系统基础课程的小型项目 (Programming Assignment, PA)将提出 x86/mips32/riscv32(64)架构相应的教学版子集, 指导学生实现一个经过简化但功能完备的 x86/mips32/riscv32(64)模拟器 NEMU(NJU EMUlator), 最终在 NEMU 上运行游戏"仙剑奇侠传", 来让学生探究"程序在计算机上运行"的基本原理.

    没时间也可以看一下这个简单得多的 Gameboy emulator 教程: https://imrannazar.com/series/gameboy-emulation-in-Javascript
    djv
        14
    djv  
       2024-04-23 21:39:32 +08:00
    @Chad0000 iOS 就用御三家的手柄,或者支持 xinput 蓝牙的还有支持连 switch 的。
    貌似有个叫启明星的 50 块能买到只是没体感。
    smallboy19991231
        15
    smallboy19991231  
       2024-04-23 21:48:06 +08:00 via iPhone
    @Kumo31 高质量啊
    LeegoYih
        16
    LeegoYih  
       2024-04-23 22:00:10 +08:00
    Github 上各种语言实现的模拟器都有,可以选一个自己擅长的语言看看
    NessajCN
        17
    NessajCN  
       2024-04-23 22:42:44 +08:00
    底下建个虚拟机,跑二进制程序
    然后剩下的就是用各种映射模拟硬件外设输入输出
    iX8NEGGn
        18
    iX8NEGGn  
       2024-04-24 01:25:56 +08:00 via iPhone   2
    就是软件模拟 CPU 、GPU 种硬件,需要点汇编概念和计算机组成原理的知识。

    入门推荐模拟 NES ,一是有情怀加持,二是不算太难,网上很多开源 NES 模拟器,但是写详细教程的没几个,网上有几篇专栏,但是最难的 PPU 模拟部分,他们没有讲到精髓。

    我当时写模拟器的时候,就励志要写一篇全网最完整的教程,后来用力过猛把自己弄生病了,现在那十万字的教程以及各种动画、流程图还没来得及整理,你要是真想实现的话,遇到不懂的倒可以讨论一下。
    Dream95
        19
    Dream95  
       2024-04-24 09:06:10 +08:00
    我也推一个入门模拟器项目 CHIP-8 ,https://en.wikipedia.org/wiki/CHIP-8 ,一天可以弄完
    jisuowei
        20
    jisuowei  
       2024-04-24 09:31:26 +08:00
    youyouzi
        21
    youyouzi  
       2024-04-24 09:45:38 +08:00
    我比较关心的是有什么好的游戏下载网站
    lzZzeucJri6FcR0o
        23
    zZzeucJri6FcR0o  
       2024-04-24 10:14:42 +08:00
    @jisuowei #22 这个好
    liangye115
        24
    liangye115  
       2024-04-24 10:39:31 +08:00
    @jisuowei #22 这个是真不错
    youyouzi
        25
    youyouzi  
       2024-04-24 17:51:44 +08:00
    大佬牛皮
    chobitssp
        26
    chobitssp  
       2024-04-24 18:35:21 +08:00
    @Chad0000 雷蛇骑仕 v2
    rookiemaster
        27
    rookiemaster  
    OP
       2024-04-24 19:37:25 +08:00
    @iX8NEGGn 能求个学习路线嘛,感谢
    iX8NEGGn
        28
    iX8NEGGn  
       2024-04-24 22:27:02 +08:00   3
    需要一点汇编和冯诺依曼体系架构基础,无需深入,了解一些常见概念就行,比如:

    - 内存单元、寄存器、IO 设备。
    - 指令集、寻址模式、寻址空间。
    - 地址总线、数据总线、控制总线。
    - MMIO (内存映射 IO )、DMA (直接内存访问)。
    - 补码、溢出、端序、堆栈、内存页、指令周期、CPU 复位等其他概念。
    - 中断、中断向量表、中断例程、可屏蔽中断、不可屏蔽中断等关于中断的概念。

    这里有个交互式学习 6502 ( NES 使用的 CPU )汇编的网站: https://skilldrick.github.io/easy6502/


    比较系统的教程推荐:

    - 中文教程,JS 实现
    - 地址: https://www.jianshu.com/p/d12426ebc2cb
    - 代码: https://github.com/qpalzmqaz123/tsnes

    - 英文教程,Rust 实现
    - 地址: https://bugzmanov.github.io/nes_ebook
    - 代码: https://github.com/bugzmanov/nes_ebook

    - 中文教程,C 实现
    - 地址: https://github.com/dustpg/BlogFM/issues?page=2
    - 代码: https://github.com/dustpg/StepFC

    - 英文视频教程,C 实现
    - 地址: https://www.youtube.com/playlist?list=PLrOv9FMX8xJHqMvSGB_9G9nZZ_4IgteYf
    - 代码: https://github.com/OneLoneCoder/olcNES

    - 英文视频,Go 实现
    - 地址:
    - 代码: https://github.com/BrianWill/nes
    注:这个 Go 实现视频并不是教程,作者批判“面向对象”中的过度设计,它把 Github 一个高星 Go 实现的 NES 模拟器改造成面向过程,评论区说很多人说这是他看过的最简单 NES 模拟器实现,我没有深入看,你如果熟悉 Go 的话可以看下。


    教程可以都看一下,代码挑一个你熟悉的语言就行,再给你挑几个比较简单的实现:

    - Go 实现: htts://github.com/fogleman/nes
    - C# 实现: https://github.com/wcabus/nes-sharp
    - C# 实现: https://github.com/GunshipPenguin/nescafe
    - C++ 实现: https://github.com/tiansongyu/6502Emulator


    还有一些比较好玩有意思的实现:

    - 5000 字节的代码,C 实现 : https://github.com/binji/smolnes
    - 子周期精确的模拟,C++ 实现: https://github.com/L-Spiro/BeesNES
    - 逻辑门级别的模拟,C++ 实现: https://github.com/emu-russia/breaknes
    - 晶体管级别的模拟,C# 实现: https://github.com/SourMesen/VisualNes
    - 晶体管级别的模拟,Javascript 实现: https://github.com/iaddis/metalnes


    应该是目前 NES 模拟器最好的实现:

    - https://github.com/SourMesen/Mesen
    - https://github.com/TASEmulators/fceux

    我不是想让你去看它的源码,太复杂估计看不懂,但它们提供 GUI Debug 功能,可以用来辅助调试。


    测试 ROM (用来测试你的指令实现是否正确): https://github.com/christopherpow/nes-test-roms


    其他一些可能有用的链接:

    - Nes 系统介绍: https://www.nesdev.org/NESDoc.pdf
    - Nes 系统介绍: https://problemkaputt.de/everynes.htm
    - 溢出标志解释: http://www.6502.org/tutorials/vflag.html
    - 滚屏渲染原理: https://zhuanlan.zhihu.com/p/464160291https://zhuanlan.zhihu.com/p/464360239
    - “精灵零命中”: https://retrocomputing.stackexchange.com/questions/1898/how-can-i-create-a-split-scroll-effect-in-an-nes-game


    最详细的参考文档网站: https://www.nesdev.org/wiki/NES_reference_guide ,初学者应该看不懂,因为东西太多太分散,一下就在其中迷路了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5206 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 08:04 PVG 16:04 LAX 00:04 JFK 03:04
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86