I need your clothes, your boots, and your motorcycle

Hacker News Top 新闻

摘要

作者详细介绍了使用Claude Code调试MAME的Power Macintosh和Apple Pippin仿真的过程,发现了PowerPC仿真和硬件支持中的错误,从而在启动进度上取得了重大进展。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/18 11:48

# Arbee 的 WIP 商店 » 我需要你的衣服、你的靴子、还有你的摩托车 来源:https://rbelmont.mameworld.info/?p=1725 长期以来,Power Macintosh 在 MAME 中的模拟进展缓慢,原因之一就是调试起来*非常*繁琐。代码面广,涉及三种语言(PowerPC、模拟的 680×0 和编译的 FORTH),而且我对代码片段管理器这类新组件内部结构不如对 680×0 代码库那么熟悉。所以,既然现在是 2026 年,我让 Claude Code 试试能否控制并调试 MAME。它回答“可以,但有局限”,经过几次尝试后,它采用了一种组合方法:生成自定义 Lua 启动脚本,并修改 MAME 将运行过程记录到文件中。 于是我将它指向 [Pippin](https://en.wikipedia.org/wiki/Apple_Pippin) 说:“这东西启动不了,让我很不开心。”(其实不是。实际提示词并没有涉及我的感受,而是基于我之前自己调试它的尝试)。很快它就发现与 Cuda 68HC05 的通信失败,原因在于 MAME 的 6522 VIA 模拟存在一个小毛病。修复那个问题后进展不大,但大约一周后,它发现了 [半打问题](https://github.com/mamedev/mame/commit/f5c2e0d751e8d086ece6b6b66c0e1f608f0d3158):MAME 的 PowerPC 模拟存在多处错误,以及对 PCI 时代 Macintosh 硬件的支持也有若干问题。于是 Pippin 现在能播放(有点 creepy 的)启动音并显示初始的“P!P P!N”方块标志,你还能像操作一台不那么隐秘的 Macintosh 一样在屏幕上移动鼠标指针。Vas 注意到 PowerPC DRC 中有一个 [反模式](https://github.com/mamedev/mame/commit/da366452b105575a58fc4d148db772ce66d2fcef),在执行时使用了代码生成和缓存时的值,而非实际的实时机器状态(这在编写 DRC 时很容易不经意间犯下)。我无法明确指出这修复了哪个具体问题,但它 100% 是一个正确性改进,很可能在日后默默发挥作用。 接下来,我想添加一台与 Pippin 硬件接近的实际 PowerMac 的支持,以便跟踪调试它的更广泛成果。[Power Macintosh 7200](https://en.wikipedia.org/wiki/Power_Macintosh_7200) 正好符合条件(它使用了与 Quadras 系列中常见的 [DAFB 视频](https://github.com/mamedev/mame/blob/master/src/mame/apple/dafb.cpp) 的变体)。起初一切顺利,多亏了 Pippin 的诸多修复——它发出 chime 声并进入了启动磁盘轮询例程。但它始终没有初始化板载视频。我告诉 Claude 这让我不开心,它又发现了 [两个 bug](https://github.com/mamedev/mame/commit/75abfe59d418dfd53f6ba22ecb69cd2ff5eb1781),出在 PowerPC 601 模拟中。修复后,主屏幕终于点亮,显示熟悉的 3.5 英寸软盘图标(启动搜索例程的界面)。然而,表示未找到磁盘的闪烁问号没有出现。不过,这已经是巨大进步,我暂时把它放在一边。 接下来,这台机器又听到让我不开心的事:Power Macintosh 6100 在尝试启动任何版本高于 7.5.0 的系统时死机。Claude 很快指出区别在于新版系统使用了原生 PowerPC SCSI Manager,而旧版则使用模拟的 680×0 代码,并追踪到失败原因是 MAME 错误地模拟了 PowerPC 的原子加载/存储指令。这些指令经常被中断处理程序使用,以保证即使系统中其他设备(如第二 CPU 或 DMA 控制器)修改了内存并通知处理器,操作仍然安全。我们收到了 Sega Model 2 MVP **gm-matthew** 的一个拉取请求,正是为了解决这个问题(因为这也导致 Sega Model 3 街机游戏出问题),但该请求在审查中被搁置。我抓取了这些更改并应用,于是 System 7.5.3 和 7.5.5 直接启动到 Finder 并愉快运行(而且由于原生 PowerPC SCSI 驱动,效率更高)。在回归测试这些更改时,我发现同样的修复也使得 Pippin 进入了显示“需要插入 CD”的动画,而 PowerMac 7200 也出现了缺失的闪烁问号。不错! 之后,我又为 [著名的 Graphing Calculator](https://www.pacifict.com/Story/)(随 Power Mac 一起发布,用于展示新 CPU 更强的数学能力)在 MAME 中无法运行而伤心。Claude 迅速指出,浮点运算指令都没有更新状态标志,而 MAME 的 PowerPC 内核最初是为 [高度优化的街机游戏](https://en.wikipedia.org/wiki/Scud_Race) 编写的,这些标志很少被使用。但它们对计算机操作系统很重要,尤其对苹果的 SANE 浮点库至关重要。目前我正在进行修复,使得 Graphing Calculator 现在能正确运行其自动演示的 2D 部分,但 3D 部分仍然不行。所以部分忧伤被缓解了,在我打字时更多工作正在进行中。(更新:3D 现在可以了。601 的对齐异常处理不正确,我原以为这个问题会产生比目前所能证明的更大的影响。) 另外,AI 非常擅长解析某种定义良好的设备的固件二进制文件——从 [电脑键盘](https://en.wikipedia.org/wiki/Apple_Extended_Keyboard) 或鼠标到 [数字合成器](https://www.vintagesynth.com/alesis/qs7),并为你提供关于内存映射、主要子程序位置及功能的优秀初步猜测。(提示:告诉它设备的功能以及在哪里可以找到 MAME 的 unidasm 反汇编器。没有它也能工作,但有了它就能更快得到可用的输出)。GPT 5.5 Pro(通过 Codex)在这方面对我特别有用,但 Claude 也不差。一旦它有了扎实的初步理解,你就可以编写像“跟踪 MIDI Note On 消息的数据流,自定义声音芯片中每个寄存器的可能功能是什么?”这样的提示,并得到有用且可操作的答案。 这里需要一些警示,以免这看起来像是完全认可 AI。首先,所有这些工作都是由一位经验丰富的模拟程序员(我)监督 AI 完成的,并在不少情况下打断它说“嘿,停下来!”,因为它有时会追逐某些理论上可能但我认为不太可能的问题。剧透:我几乎总是对的。AI 在许多方面都有帮助,偶尔能随机冒出像“哦,0x123456 处的这个数据结构是一个 QuickDraw GrafPort”这样惊人的正确信息,但当它需要根据数据实际得出结论或判断时,很容易跑偏。 其次,AI *发现*了 bug,但修复代码*是由我编写*的,除了一些琐碎的一行修改(即使那些我也按照个人风格和命名偏好进行了编辑)。MAME 目前还没有正式的 AI 政策,但我们不希望看到“氛围代码”提交进来(如果你让 AI 写你的拉取请求描述,你肯定会惹恼我,更不用说团队里那些对 AI 持怀疑态度的人了)。你可以让 AI 自由地进行逆向工程和调试,但最终 MAME 需要的是提交者能够理解并维护的代码。

相似文章

模拟器调试:Area 5150 的 Lake Effect

Lobsters Hottest

本文详细介绍了在MartyPC模拟器上调试Area5150演示中“Lake”效应的过程,解释了需要特定标题hack的原因,以及通过总线嗅探和动态时钟实现周期精确CGA模拟的后续修复方法。

0xMorty (@0xMortyx) 在 X 上

X AI KOLs

本文概述了一个 9 步循环,利用 Claude Code 的内置原语(规划模式、子代理、钩子、CLAUDE.md、斜杠命令)来强制执行一个严谨的、高级工程师风格的开发工作流。它强调理解代码库、规划、执行标准以及确定性钩子,以避免代价高昂的错误。