VS Code就是
你沒有眼花沒有看錯。你會問30年前的NES怎么能用現在的工具制作呢?微軟怎么想起NES了。
這事跟微軟沒什么關系。這要感謝曾哥(ZENG GE)。VS Code是一個通用編輯器,通過不同的插件,可以編輯不同的源代碼。曾哥編寫了一個6502插件,這很適合我們使用。
VS Code只是編輯器的作用,這個插件也能編譯,但不能直接編譯成NES。看上去用處不大。我們可以用別的編輯器,也有現成的編譯器,為什么推薦VS Code?
這是因為這個編輯器是有着現代碼編輯功能的,例如:高亮、輸入提醒、自動完成,自動調整大小寫,實時糾錯。對重點是實時糾錯。我們有C語言的編輯器,以上功能都有。也有Java的編輯器,以上功能都有。但是6502匯編的編輯器呢?大家回看一下6502 Macroassembler & Simulator。這貨很令人失望。別的現代編輯器,例如NPP,VIM,SUBLINE TEXT沒有一個想起6502來。只能自己定義高亮。我們最需要的是“實時糾錯”。所以目前只有我推薦的這個合用。
一、怎么實現讓VS Code編輯NES/FC游戲源代碼(即6502匯編代碼)。
1 下載安裝VS Code,
2 安裝6502插件
3 漢化界面
4 將默認編碼改成 GB2312 (這是為了寫注釋。)
具體:
1.1下載:https://code.visualstudio.com/
1.2 安裝:。。。略(誰都會的。)
2. 安裝插件:
點這里,
你可能還是英文界面,不過沒有關系。
在這兒輸入“6502”,(我在想要不要回車)
等一會,會搜索出一堆插件。
我們要第一個,看這名字。
這兒(紅框) 你會看見綠色 Install, 按它安裝插件。 這就行。
3. 漢化界面
這比較簡單,而且不是重點。看網上一大堆教程,我也是從網上學的。我隨意貼幾個,不行你可以再搜:“VS Code 漢化界面”
https://jingyan.baidu.com/article/a681b0de7654283b184346ea.html
https://blog.csdn.net/testcs_dn/article/details/75070415
https://blog.csdn.net/u012308586/article/details/89353861
4. 設置默認編碼
這同樣超簡單,看網上的教程就好。不行你可以再搜:“VS Code 設置默認編碼 GB2312”,用這個編碼是為了跟6502Sim可以互通。用后者調試小段代碼是很有必要的。VS Code是沒有調試功能的,那么互補是很重要的。
我們認准 GB2312
https://jingyan.baidu.com/article/5552ef4792ac5a518ffbc996.html
https://blog.csdn.net/u012308586/article/details/98201989
到這兒,我們就可以正常使用VS Code了。假設你還想用VS Code來編別的東東,那么你就自己想辦法協調了。
二、VS Code使用細節
1 我們6502匯編的源代碼的擴展名統一用"65s"。
2 我們將所有源代碼放在同一個文件夾中,要放同一個項目的,不能放第二個項目的源代碼(包括子文件夾)。這里只限65s文件,其他文件不限制。這是因為VS Code是以文件夾為單位識別一個項目的。它會認為整個文件夾包括子文件夾中的65s文件為一個整個項目。所以多余的源代碼會混淆的。
3 以打開文件夾方式,打開源代碼。
4 初次打開一個文件夾,本插件會建立一個子文件夾.vscode。並在里面初始產生一個名為“6502project.json”的文件。這個就是項目配置文件了。
我們用VS Code打開它。我們加一些回車和縮進,顯示如下:
{ "compileTimes": 2, "suggestion": true, "singleFile": { "outFile": "", "copyCodeToClipboard": true }, "projects": [ { "name": "project1", "entry": "main.65s", "includes": [ "**/*.65s" ], "excludes": [], "outFile": "", "patchFile": "", "copyCodeToClipboard": false } ] }
要改兩個地方。
范例:本例我寫了一個精靈程序,就只有這一個代碼文件(Spirit01.65s)了,那就寫成這樣:
{ "compileTimes": 2, "suggestion": true, "singleFile": { "outFile": "prom.bin", "copyCodeToClipboard": true }, "projects": [ { "name": "project1", "entry": "Spirit01.65s", "includes": [ "**/*.65s" ], "excludes": [], "outFile": "prom.bin", "patchFile": "", "copyCodeToClipboard": false } ] }
按Ctrl+F6 編譯。


點擊這個”6502 Assembler for VSCode“,
你可以查看”細節“,就是語法了。
6502的語法大體是一樣,不同的匯編器有一點小區別,更多的區別在於宏的部分,還有局部標簽的部分。
當時我要找一個兼容這個語法的匯編器,還真難。比較了好幾個才找到的。雖然這個插件也有編譯功能,但不能一鍵生成NES,所以我用了另外的辦法。這是后話。
你現在只需要明白,用這個插件就得符合它的語法。
三、注意點與不足
1 我用自己開發的軟件,分配變量地址。實時生成65s文件。這在VSCode里面也是實時更新的。但是其中變量標簽名稱的更改、增刪的”識別“就不能同步。會用紅色波紋線顯示出錯。可以不去管它。下次重開VSCode,或重開文件夾的時候就會更新了。
2 不能一鍵生成NES,說不得要下插件的源碼來修改。我暫時還不懂。插件作者(曾哥)也沒空。我用另一個兼容的行指令匯編器,配上批處理,完美解決了。
四、配合使用的軟件
1 兼容的行指令匯編器"asm6f_64"。(為了一鍵生成,為了方便) 【舊32位(系統)電腦換成asm6f_32,在工具/壓縮包中】
2 我自己開發的"NES文件頭編輯器"。(必需的)
3 我自己開發的"NES內存變量分配器"。(為了省腦力)【需要 .NET Framework 4.0,WIN10可無視】
4 圖形工具"YYCHR"。(或別的你喜歡的。)
這些工具,我都放到范例包里面,下載:http://fogota.ys168.com/ 找到文件夾 NES Tool Kit就在里面。
五、如何制作NES/FC游戲程序
1 制作NES文件頭。用我的"NES文件頭編輯器",輸入相應參數,保存成bin文件(當然也能反復修改),建議定名為NesHeader.bin。具體用法見軟件的用戶手冊,在壓縮包中。
作為初學者,我們只寫mapper0的游戲程序,NesHeader.bin中的mapper一項寫0就好。
程序從$8000開始的話,PRG ROM一項寫2就好;程序從$C000開始的話,PRG ROM一項寫1就好。切頁的不同了。我們mapper0的游戲程序沒有切頁,暫不提這個。
我們mapper0的游戲程序,CHR ROM一項寫1就好。
其它不懂,暫時默認,以后有需要再改。
2 制作圖形文件CHR。用YYCHR從別的游戲ROM里面copy過來,也能自己DIY。保存成chr文件。一般需要8K的。詳細怎么做到,在我后面的教程中細說。當下可以先用我的教程包中的圖形。
3 制作批處理文件Build.cmd
我們要先新建一個文件夾。將文件頭NesHeader.bin,和圖形文件xxx.chr放進去。還有,將asm6f_64.exe放進去(這是64位的)。
那么,我們的主文件現在還沒寫,我們先定個名字叫main.65s,相應的編譯后生成的名字就是prom.bin。最終生成的nes名字叫XXX.nes。
我們在該文件夾中空白處,右擊新建一個記事本文件。將文件名改為Build.cmd。擴展名也是要改的,不能是txt。(WIN10的你要在文件瀏覽器上方,點查看,在“文件擴展名”處打外勾。就能顯示並更改擴展名了。其他系統到文件夾選項去解決。【另一個方法是在記事本保存時選類型*.*,在名稱處寫上全名,包括擴展名,編碼默認。】)
改好名后,右鍵Build.cmd,點編譯就會用記事本打開。輸入下面的內容:
asm6f_64 main.65s prom.bin
copy /b NesHeader.bin+prom.bin+xxx.chr XXX.nes
pause
好了,就是這樣。保存,編碼默認。
除了mapper0以外都會切頁,那么prom就不止一個文件了,chr也不止一個。所以這里與文件頭設定有關的。
具體指令的作用,以后慢慢說,現在只要會換名字就好。如果不太清楚,可以打開我的范件看看。記得右鍵-編輯。雙擊是運行這個批處理。
4 用VSCode編寫代碼,編碼選用GB2312。
這里不多說怎么編了,下一篇再聊。
5 編譯和合成NES
雙擊“Build.cmd”。報錯,你會在cmd窗口中看到。不報錯自然就是pass。你會在該文件夾中找到生成的nes文件。
可以試下載我的范例,解壓。刪掉里面的nes文件,試試雙擊“Nes一鍵編譯.cmd”。用模擬器看看nes文件的效果。(名字不重要。。。)