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

oneshot.s-這樣更好,對眼睛更友善。

工作原理:15 個操作碼和 9 個向量

這項技能叫做操作碼(opcode) ,它定義了一個語義領域特定語言(DSL),借鑒了 6502 的助記符,但將其映射到問題分類上。核心指令集架構(ISA)只有 15 個操作碼。你完全可以把它全部記在腦子裡。

LDA加載問題。 STA 將BCS持久化到某個槽位。 LDX / INX / CPX處理循環。 JSR JSR九個 I/O 向量之一: LDXFETCHFIXTESTLINTPUSHPULLCLONEANALYZE / STA根據測試結果進行分支。 BRK BRK並停止。 PHA / PLA從直接對應到 Claude Code 任務清單PHA堆疊中推送和REVIEW BCC

有一個零頁,其中包含命名槽位。 $00是目前問題 ID, $01是分支名稱, $02是目前文件, $05是提交訊息。已取得的問題佇列位於$10-$1F 。堆疊頁$0100-$01FFClaude Code 任務清單。

面向操作碼的程式設計(OOP,顯而易見🙂)

6502 助記符。現代人工智慧執行。工作流程即程序。

它透過 Forge 抽象層與 GitHub 或 GitLab 通信,因此JSR PUSH會在 GitHub 上建立一個 PR 或在 GitLab 上建立一個 MR。這樣一來,用戶無需改變他們的術語。

一次真正的分診會議

程式會遍歷所有標記為「bug」的問題,嘗試修復每個問題,並且只提交那些測試通過且自檢結果為「無誤」的修復。失敗的修復會被跳過。最後,它會為所有修復成功的問題建立PHA / PLA循環直接對應到 Claude Code 的任務清單中,因此每個提交的問題都會成為可追蹤的實際待辦事項。

排空交換空間.s

drain-the-swamp.s - 以其首選輸出格式;包含歷史準確的程式碼審查註釋

約束即特徵

6502 的美學設計並非只是一種懷舊的裝飾,它更是一種強制功能。當輸出格式為組合語言時,你需要在執行前提交一個動詞序列,而不是在聊天模式下漫無目的地遊蕩。產生的追蹤資訊比散文快得多。它們可以被差異比較、搜尋和版本控制。你可以將一個.s檔案與程式碼一起提交,並在下一批問題中重新執行它。

想要「補充一句背景資訊」的衝動是整個失敗模式的根源。務必抵抗這種衝動。

這項技能對此要求非常嚴格。 Claude 的回覆必須是一個有效的.s程式。沒有問候語,沒有結尾語,沒有“讓我來”,也沒有 Markdown 標題。如果它不符合指令、指示或分號註釋的形式,就不會被執行。雖然有一些例外情況,例如.ASK用於提問(≤60 個字元),. .NOTE用於記錄觀察結果(≤80 個字元),以及.ERR用於報告錯誤,但這些只是洩壓閥,而不是用來寫文章的。

擴充版ISA:為了完整性和懷舊

還有一個完整的擴充層(約 40 個額外的助記符),可以透過啟用.EXTENDED ON來啟用。移位操作會變成優先權提升( ASL A = "提升優先權")。邏輯運算會變成標籤過濾代數( AND #imm = "相交標籤遮罩")。合併衝突時會產生BVS分支。這些操作大多被標記為隱喻,因此會在追蹤記錄中顯示,但不會實際執行。

為了完整起見, .UNSAFE ON背後還有六個非法操作碼。它們是真正未公開的 6502 操作碼,例如LAXSAXDCP 。純粹是為了增添趣味性。雖然有所描述,但從未執行過,甚至沒有設定過指令。它們的存在只是因為我忍不住想把它們加進去。

代幣呢?

我原以為精簡的製作流程能比散文體小說《克勞德》節省大量成本。但事實並非如此簡單。

原因在於開銷不對稱。對於小型、確定性任務,編排開銷佔據主導地位——例如執行 CI 管線來編譯單一檔案。而操作碼在具有更多決策點的大型程序中(多問題隊列遍歷、更長的推理鏈,在這些情況下,即使是文筆流暢的克勞德也會滔滔不絕)則更勝一籌。

散文提示會引發解讀,而集會則不會。

這真的有用嗎?

也許吧。如果你對許多問題都採用相同的分類模式,例如掃描待辦事項、修復簡單的錯誤和提交 PR,那麼節省代幣就變得有意義了,而且結構化的輸出比無休止的 TL;DR 文章更易於閱讀。

.s文件是可供審查的工件。

這些痕跡就是審計日誌。

而將工作流程規劃為一系列操作碼後再執行,這種限制其實是一種出乎意料的好方法。

伯克

歸根究底,問題還是老樣子。

你是喜歡吃乳蛋餅的人,還是真正的程式設計師?

真正的程式設計師不需要散文。

他們需要操作碼、進位標誌和最後的BRK

完成工作。停止機器🙂


JSR FETCHBRK之間,這種諷刺意味就不再那麼濃厚了。

但如果這篇文章讓你會心一笑,或是喚起了你一些遙遠的回憶,請在下方留言。


程式碼

完整技能和範例程式: github.com/newell-paul/opcode



原文出處:https://dev.to/newellpaul/i-programmed-an-ai-in-6502-assembly-it-worked-gpi


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝12   💬4   ❤️1
464
🥈
alicec
📝1   ❤️2
87
#4
我愛JS
💬1  
3
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
📢 贊助商廣告 · 我要刊登