【原創】NES第二波:如何用VS Code,編寫NES/FC游戲程序。


  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)了,那就寫成這樣:

  " entry":"Spirit01.65s",
       " outFile":"prom.bin"
  
 整個就是:
{
    "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 編譯。

 
  5 本插件支持的語法
  我會告訴你,上哪看。點開插件欄。就是點擊 。安裝插件時候的那個。你會看見已經安裝的插件。
    漢化以后多了一個“Chinese"插件。

 

   點擊這個”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文件的效果。(名字不重要。。。)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM