10萬行匯編代碼
英文原文:100,000 Lines of Assembly Language
偶爾會有人問我有關編寫超級任天堂游戲的問題,那些人是怎么管理成千上萬行 16 位匯編語言代碼組成的項目的?答案是:它并不像你想象中那么艱難。
SNES 硬件的手冊有幾百頁,我不記得具體是多少了,最多 400 頁吧。加入一個詳細的 65816 匯編語言教材并結合我們現在說的最多 800 或 900 頁,這只是我認為要完全理解一個 OSX 計算機的所需頁數 11,000的百分之八十。當然,你在C語言里的匯編代碼也會出現很多無形的錯誤。比如,這是一些老的 x86 代碼:
mov ax, 20
mov bx, -1
int XX
這些代碼設置了一些參數并調用中斷。它看起來是正確的,也可以正常運行,并且可能在一個商業化的產品中使用,但是在新版的 MS-DOS 中它崩潰了。為什么?因為第二個參數應該傳到 dx 寄存器,而不是 bx。它只有在前面有代碼發生了中斷并返回-1到 dx 的情況下才能正常運行,但這是很罕見的,所以上面代碼中的第二行并沒有做任何有用的事。
完全使用匯編語言工作的秘密是:做到有組織,寫代碼前先思考并保代碼持清潔和易懂。這和寫好的 Javascript 和 C++ 代碼是有很多相似之處的。Steve McConnell 編寫的 Code Complete 是真正的超級任天堂游戲開發者指南。
但是這些談論的編程語言和硬件是落后的。Jordan Mechner 設計和編寫了 Apple II 上的 Prince of Persia,游戲和展示所有關卡的編輯器是用 8 位 6502 匯編語言編寫的,他用日記記錄了寫這個游戲的過程。你可能期望這個日記里都是編程參考和 6502 編程訣竅,但是里面一點關于那個的內容也沒有。當然,他在幕后做高難度的技術工作,但是那不是他要記錄的。他記錄的是一個設計師和導演的經歷:一個人在大學畢業后居住在離家很遠的地方,為自己的夢想走了很多彎路(別被嚇倒了,那是很迷人的故事)。
他可能有另外一些編程的記錄,但是我想應該沒有。盡管如此,他遠不止在想技術問題:一個小說家的個人日記的內容不會全是講語法和句子結構的~
(如果你喜歡這篇文章,你可能還會喜歡 The Pure Tech Side is the Dark Side)