V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rookiemaster
V2EX  ›  程序员

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

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

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

    29 条回复    2024-04-25 09:30:43 +08:00
    Flourite
        1
    Flourite  
       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 文件运行
    Chad0000
        3
    Chad0000  
       2024-04-23 19:21:29 +08:00
    @582033
    尝试了很多 ROOM ,引起童年回忆,但:触摸没手感,有啥实体手柄可用吗
    Flourite
        4
    Flourite  
       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  
       2024-04-23 20:23:00 +08:00
    用软件模拟硬件
    Flourite
        12
    Flourite  
       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
    lzZzeucJri6FcR0o  
       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 实现: https://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   ·   实用小工具   ·   5355 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 03:24 · PVG 11:24 · LAX 20:24 · JFK 23:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.