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

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

  •  
  •   rookiemaster · 247 天前 · 4351 次点击
    这是一个创建于 247 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    Delta 是自苹果更改规定允许模拟器上架以来第一批登陆 AppStore 的模拟器之一。支持模拟 NES 、SNES 、Game Boy 、Game Boy Advance 、N64 和 Nintendo DS 游戏。
    seers
        8
    seers  
       247 天前
    @Chad0000 我在狗东几十块钱买了个叫 SHANWAN 的手柄,可以模拟 xbox ,实测模拟器可用,手感还行
    gason406
        9
    gason406  
       247 天前
    @Flourite #1 拳皇在 GBA 上只有 EX1 ( 99 ) EX2 ( 2000 )两部,恐龙快打是卡普空 CPS 上的,没有 gba ,而且大概是版权原因后续也没复刻到别的系统上过,感觉你需要补充一些背景知识
    levelworm
        10
    levelworm  
       247 天前
    可以查一下 How to write an emulator
    danbai
        11
    danbai  
       247 天前
    用软件模拟硬件
    Flourite
        12
    Flourite  
       247 天前
    Kumo31
        13
    Kumo31  
       247 天前   ❤️ 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  
       247 天前
    @Chad0000 iOS 就用御三家的手柄,或者支持 xinput 蓝牙的还有支持连 switch 的。
    貌似有个叫启明星的 50 块能买到只是没体感。
    smallboy19991231
        15
    smallboy19991231  
       247 天前 via iPhone
    @Kumo31 高质量啊
    LeegoYih
        16
    LeegoYih  
       247 天前
    Github 上各种语言实现的模拟器都有,可以选一个自己擅长的语言看看
    NessajCN
        17
    NessajCN  
       247 天前
    底下建个虚拟机,跑二进制程序
    然后剩下的就是用各种映射模拟硬件外设输入输出
    iX8NEGGn
        18
    iX8NEGGn  
       247 天前 via iPhone   ❤️ 2
    就是软件模拟 CPU 、GPU 各种硬件,需要点汇编概念和计算机组成原理的知识。

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

    我当时写模拟器的时候,就励志要写一篇全网最完整的教程,后来用力过猛把自己弄生病了,现在那十万字的教程以及各种动画、流程图还没来得及整理,你要是真想实现的话,遇到不懂的倒可以讨论一下。
    Dream95
        19
    Dream95  
       246 天前
    我也推一个入门模拟器项目 CHIP-8 ,https://en.wikipedia.org/wiki/CHIP-8 ,一天可以弄完
    youyouzi
        21
    youyouzi  
       246 天前
    我比较关心的是有什么好的游戏下载网站
    djasdjds
        23
    djasdjds  
       246 天前
    @jisuowei #22 这个好
    liangye115
        24
    liangye115  
       246 天前
    @jisuowei #22 这个是真不错
    youyouzi
        25
    youyouzi  
       246 天前
    大佬牛皮
    chobitssp
        26
    chobitssp  
       246 天前
    @Chad0000 雷蛇骑仕 v2
    rookiemaster
        27
    rookiemaster  
    OP
       246 天前
    @iX8NEGGn 能求个学习路线嘛,感谢
    iX8NEGGn
        28
    iX8NEGGn  
       246 天前   ❤️ 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   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 22:11 · PVG 06:11 · LAX 14:11 · JFK 17:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.