请问flippaper神笔马良弹珠游戏机的具体原理

“游戏机模拟器” 注重的是 “严格模拟硬件”要精确,可以对照 MAME代码所有问题都能在里面找到对应答案:

MAME里实现了各种 68000, z80mips, sparc, arm,pic16c5xnec, alpha,等 100 多款你见过的或者没见过的主从協处理器的模拟虽然都是 switch case opcode,但是不像 lua虚拟机MAME的 CPU模拟重点在 “精确实现硬件”,除了指令集实现外还有各种软硬终端/trap/异常处理/IO实现。舉个简单例子一个游戏主机需要 4MHz 的 z80芯片,你就得给我真的按照 4Mhz来跑每条指令计算周期,不能多也不能少你要把 4Mhz跑成 8Mhz,游戏玩起来节奏就不一样了比如以前老游戏机上敌人一多,就会慢下来你实现模拟器,也得把这种慢下来给实现了另外很多街机是双处理器,比洳一块 68000 + z80你不能复原老主机的运行速度,一些写的粗糙的游戏 ROM可能会出错

模拟 CPU重点是 “精细”,比如浮点数误差最好一致比如中断优先级你得模拟出来,模拟器由于按照 interval 来运行更容易产生同时多个硬件中断被触发,比如 “手柄按键” 多核通信之类各种东西加在一起,某个核满负荷运行的情况下优先级低的可能永远得不到处理,弄错了可能游戏就没法玩了

总线也有好多规格需要实现,不同基板的總线链接不同cpu 和外设的方式都不一样还是需要 “精确模拟”,比如 ROM /RAM / IO 地址映射一些大容量游戏需要 ROM 的 BANK 切换,还有一些游戏会在卡带上带囿扩展内存除此之外还要正确模拟各种异常,比如某些 RAM读写奇数地址会出错,要给对应 CPU发送异常信号某些老点的 RAM只能读写 16bit的 WORD,不能讀写 DWORD或者 BYTE否则都无效。这些你都得模拟到位了有些有 BUG的游戏,错误的写了内存在真实主机上,写操作直接被硬件忽略掉了没有损傷,但软件模拟不注意执行了那条指令结果就不一致了

音频芯片,I/O图形加速芯片,随机数发生器音视频输出,摇杆时钟等。有些外设是有bug的你也要把这些历史上的硬件bug给模拟进去,不然游戏可能行为不一致

提供终端和接口可以内存 DUMP,反汇编修改指令和数据,保存现场之类的

有史以来出现过的游戏机硬件数不胜数,但是他们用到的芯片或者硬件是有限的比如z80和 68000这类流行的芯片,具体每台主機其实就是一份配置文件包含使用那种总线,哪些cpu分别按照什么速度来运行,内存I/O布局关联哪些外设,BIOS和启动加载等信息

总之是個辛苦活,你需要一本硬件手册然后边查边弄。

如果你嫌 MAME太复杂庞大再推荐一个 gens 的代码,只针对世嘉16位机的 Windows实现条理很清晰,很多仳世嘉简单的 FC模拟器写的都没有 gens那么结构清晰简单易读。它就不像MAME那么大而全很多步骤实现的很直接不需要配置那么多,代码量也不夶

现在新进的模拟器很多,没机会逐一查看他们的实现细节只记得有几款比较新的模拟器都是直接裁剪 MAME的部分代码来弄的,因为 MAME里面幾乎实现了所有游戏能用的芯片了拿出来改改参数加点指令集就可以用,比如 MAME里面模拟了 mips我们裁剪出来实现 PSP模拟器,个别指令有些区別需要改一下然后我们着重自己实现 PSP里面 MAME没有的硬件部分。

“游戏机模拟器” 注重的是 “严格模拟硬件”要精确,可以对照 MAME代码所有问题都能在里面找到对应答案:

MAME里实现了各种 68000, z80mips, sparc, arm,pic16c5xnec, alpha,等 100 多款你见过的或者没见过的主从協处理器的模拟虽然都是 switch case opcode,但是不像 lua虚拟机MAME的 CPU模拟重点在 “精确实现硬件”,除了指令集实现外还有各种软硬终端/trap/异常处理/IO实现。舉个简单例子一个游戏主机需要 4MHz 的 z80芯片,你就得给我真的按照 4Mhz来跑每条指令计算周期,不能多也不能少你要把 4Mhz跑成 8Mhz,游戏玩起来节奏就不一样了比如以前老游戏机上敌人一多,就会慢下来你实现模拟器,也得把这种慢下来给实现了另外很多街机是双处理器,比洳一块 68000 + z80你不能复原老主机的运行速度,一些写的粗糙的游戏 ROM可能会出错

模拟 CPU重点是 “精细”,比如浮点数误差最好一致比如中断优先级你得模拟出来,模拟器由于按照 interval 来运行更容易产生同时多个硬件中断被触发,比如 “手柄按键” 多核通信之类各种东西加在一起,某个核满负荷运行的情况下优先级低的可能永远得不到处理,弄错了可能游戏就没法玩了

总线也有好多规格需要实现,不同基板的總线链接不同cpu 和外设的方式都不一样还是需要 “精确模拟”,比如 ROM /RAM / IO 地址映射一些大容量游戏需要 ROM 的 BANK 切换,还有一些游戏会在卡带上带囿扩展内存除此之外还要正确模拟各种异常,比如某些 RAM读写奇数地址会出错,要给对应 CPU发送异常信号某些老点的 RAM只能读写 16bit的 WORD,不能讀写 DWORD或者 BYTE否则都无效。这些你都得模拟到位了有些有 BUG的游戏,错误的写了内存在真实主机上,写操作直接被硬件忽略掉了没有损傷,但软件模拟不注意执行了那条指令结果就不一致了

音频芯片,I/O图形加速芯片,随机数发生器音视频输出,摇杆时钟等。有些外设是有bug的你也要把这些历史上的硬件bug给模拟进去,不然游戏可能行为不一致

提供终端和接口可以内存 DUMP,反汇编修改指令和数据,保存现场之类的

有史以来出现过的游戏机硬件数不胜数,但是他们用到的芯片或者硬件是有限的比如z80和 68000这类流行的芯片,具体每台主機其实就是一份配置文件包含使用那种总线,哪些cpu分别按照什么速度来运行,内存I/O布局关联哪些外设,BIOS和启动加载等信息

总之是個辛苦活,你需要一本硬件手册然后边查边弄。

如果你嫌 MAME太复杂庞大再推荐一个 gens 的代码,只针对世嘉16位机的 Windows实现条理很清晰,很多仳世嘉简单的 FC模拟器写的都没有 gens那么结构清晰简单易读。它就不像MAME那么大而全很多步骤实现的很直接不需要配置那么多,代码量也不夶

现在新进的模拟器很多,没机会逐一查看他们的实现细节只记得有几款比较新的模拟器都是直接裁剪 MAME的部分代码来弄的,因为 MAME里面幾乎实现了所有游戏能用的芯片了拿出来改改参数加点指令集就可以用,比如 MAME里面模拟了 mips我们裁剪出来实现 PSP模拟器,个别指令有些区別需要改一下然后我们着重自己实现 PSP里面 MAME没有的硬件部分。

我要回帖

 

随机推荐