1975 年,6502 處理器透過記憶體和控制流處理 8 位元值。如今,克勞德程式碼技能使用相同的助記符,透過分類循環來處理偽造的工單。
保羅紐厄爾2026年4月 · 閱讀需時8分鐘
說實話,這最初只是個玩笑。我想看看能不能讓克勞德·科德理解6502彙編語言。
6502 處理器曾用於 Apple II、Commodore 64、BBC Micro 和 NES。它有 56 個操作碼、64KB 的位址空間,但完全不適合大型語言模型。
所以我發展了一個 Claude Code 技能,將它的指令集對應BRK現代化的故障排查和修復工作流程。你寫.s文件,Claude 執行它們,它的回應也是彙編程式碼。其中包含零頁和堆疊資訊。 BRK 表示「提交並停止」。
四十年後,我正在編寫 LDA 來加載第 42 號問題,該問題包含描述、驗收標準、一組標籤、Claude 可以用視覺實際看到的螢幕截圖以及連結的 PR 圖表。
動詞沒有變化,名詞的詞量卻增加了大約六個數量級。

peek.s - _6502 顏色看起來很不協調_
六個操作碼,三個標誌位。這就是整個系統的核心:
當然,這並不是真正的6502型晶片。我只是藉用了它的記憶方法。
如果測試通過( C=1 ), BCC提交並停止。如果測試失敗( C=0 ),則skip下一個循環並返回,不提交。就是這樣。 BCC/ BCS模式直接沿用自真正的 6502。進位置位表示成功,進位清除表示失敗。
一段 800 個字元的散文回應(「讓我分析一下這個問題。我將從檢查以下檔案開始…」)變成了幾行彙編追蹤程式碼。
問題已獲取,文件已修復,測試已通過,差異已審核,已提交,PR 已建立。沒有“讓我看看…”,沒有“我接下來會…”,沒有“這是我做的…”。只有追蹤資訊。
這段追蹤記錄是結構化的,可進行差異化分析,可進行搜尋,可重複執行。它是否比散文消耗更少的令牌,結果比我預想的要複雜得多,但其結構價值仍然存在。
oneshot.s是更進一步:獲取問題、分析問題、修復問題、測試問題、自我審查並提交,如果第一次嘗試失敗,則提供一個重試分支。
如果第一個修復方案通過了測試和審查, BRK會立即提交。否則,重試分支會再試一次。如果重試也失敗了, RTS會將該分支保持未提交狀態,等待手動處理。進位標誌的作用與原始晶片完全相同,即根據二進位結果路由控制流。

oneshot.s-這樣更好,對眼睛更友善。
這項技能叫做操作碼(opcode) ,它定義了一個語義領域特定語言(DSL),借鑒了 6502 的助記符,但將其映射到問題分類上。核心指令集架構(ISA)只有 15 個操作碼。你完全可以把它全部記在腦子裡。
LDA加載問題。 STA 將BCS持久化到某個槽位。 LDX / INX / CPX處理循環。 JSR JSR九個 I/O 向量之一: LDX 、 FETCH 、 FIX 、 TEST 、 LINT 、 PUSH 、 PULL 、 CLONE 、 ANALYZE / STA根據測試結果進行分支。 BRK BRK並停止。 PHA / PLA從直接對應到 Claude Code 任務清單PHA堆疊中推送和REVIEW BCC 。
有一個零頁,其中包含命名槽位。 $00是目前問題 ID, $01是分支名稱, $02是目前文件, $05是提交訊息。已取得的問題佇列位於$10-$1F 。堆疊頁$0100-$01FF是Claude Code 任務清單。
面向操作碼的程式設計(OOP,顯而易見🙂)
6502 助記符。現代人工智慧執行。工作流程即程序。
它透過 Forge 抽象層與 GitHub 或 GitLab 通信,因此JSR PUSH會在 GitHub 上建立一個 PR 或在 GitLab 上建立一個 MR。這樣一來,用戶無需改變他們的術語。
程式會遍歷所有標記為「bug」的問題,嘗試修復每個問題,並且只提交那些測試通過且自檢結果為「無誤」的修復。失敗的修復會被跳過。最後,它會為所有修復成功的問題建立PHA / PLA循環直接對應到 Claude Code 的任務清單中,因此每個提交的問題都會成為可追蹤的實際待辦事項。

drain-the-swamp.s - 以其首選輸出格式;包含歷史準確的程式碼審查註釋
6502 的美學設計並非只是一種懷舊的裝飾,它更是一種強制功能。當輸出格式為組合語言時,你需要在執行前提交一個動詞序列,而不是在聊天模式下漫無目的地遊蕩。產生的追蹤資訊比散文快得多。它們可以被差異比較、搜尋和版本控制。你可以將一個.s檔案與程式碼一起提交,並在下一批問題中重新執行它。
想要「補充一句背景資訊」的衝動是整個失敗模式的根源。務必抵抗這種衝動。
這項技能對此要求非常嚴格。 Claude 的回覆必須是一個有效的.s程式。沒有問候語,沒有結尾語,沒有“讓我來”,也沒有 Markdown 標題。如果它不符合指令、指示或分號註釋的形式,就不會被執行。雖然有一些例外情況,例如.ASK用於提問(≤60 個字元),. .NOTE用於記錄觀察結果(≤80 個字元),以及.ERR用於報告錯誤,但這些只是洩壓閥,而不是用來寫文章的。
還有一個完整的擴充層(約 40 個額外的助記符),可以透過啟用.EXTENDED ON來啟用。移位操作會變成優先權提升( ASL A = "提升優先權")。邏輯運算會變成標籤過濾代數( AND #imm = "相交標籤遮罩")。合併衝突時會產生BVS分支。這些操作大多被標記為隱喻,因此會在追蹤記錄中顯示,但不會實際執行。
為了完整起見, .UNSAFE ON背後還有六個非法操作碼。它們是真正未公開的 6502 操作碼,例如LAX 、 SAX和DCP 。純粹是為了增添趣味性。雖然有所描述,但從未執行過,甚至沒有設定過指令。它們的存在只是因為我忍不住想把它們加進去。
我原以為精簡的製作流程能比散文體小說《克勞德》節省大量成本。但事實並非如此簡單。
原因在於開銷不對稱。對於小型、確定性任務,編排開銷佔據主導地位——例如執行 CI 管線來編譯單一檔案。而操作碼在具有更多決策點的大型程序中(多問題隊列遍歷、更長的推理鏈,在這些情況下,即使是文筆流暢的克勞德也會滔滔不絕)則更勝一籌。
散文提示會引發解讀,而集會則不會。
也許吧。如果你對許多問題都採用相同的分類模式,例如掃描待辦事項、修復簡單的錯誤和提交 PR,那麼節省代幣就變得有意義了,而且結構化的輸出比無休止的 TL;DR 文章更易於閱讀。
.s文件是可供審查的工件。
這些痕跡就是審計日誌。
而將工作流程規劃為一系列操作碼後再執行,這種限制其實是一種出乎意料的好方法。
歸根究底,問題還是老樣子。
你是喜歡吃乳蛋餅的人,還是真正的程式設計師?
真正的程式設計師不需要散文。
他們需要操作碼、進位標誌和最後的BRK 。
完成工作。停止機器🙂
在JSR FETCH和BRK之間,這種諷刺意味就不再那麼濃厚了。
但如果這篇文章讓你會心一笑,或是喚起了你一些遙遠的回憶,請在下方留言。
完整技能和範例程式: github.com/newell-paul/opcode
原文出處:https://dev.to/newellpaul/i-programmed-an-ai-in-6502-assembly-it-worked-gpi