与在模拟器中运行的NES游戏进行通信

Ser*_*rov 3 emulation

我正在考虑创建一个有趣的街机.像这样的东西.我想知道是否有可能从某些游戏获得事件,例如超级马里奥.假设我完成了一个级别,我希望通过得分和其他一些数据得到该事件,并对该数据执行一些操作.我正在考虑在Windows中运行模拟器.有没有人在做这样的事情?从旧的NES游戏获取事件和数据是否有太难的方法?可能是我应该运行不是Windows,而是一些Linux呢?好吧,请分享一下你如何做软件部分的想法.

Mar*_*tin 5

现代仿真器(如FCEUX)可以通过Lua脚本与正在运行的ROM进行交互(参见示例视频).使用此API,您可以编写Lua脚本:

  1. 监视某个内存位置
  2. 等待它保持一些特殊值(例如level_just_finished)
  3. 从内存中读出当前分数
  4. 用分数做点什么

为了知道要检查哪些内存位置,您需要反汇编ROM或通过调试器运行它,或两者兼而有之.至于超级马里奥兄弟,已经有一个评论反汇编可用.FCEUX仿真器还有一个可以使用的内置调试器/反汇编器.

所有这些都需要花费很多精力,你需要了解Lua,6502程序集以及NES的内部工作原理.对于您的街机机器,您可能最好只使用UberNES模拟器,它可以自动跟踪许多热门游戏的高分.