紅白機的遊戲是怎樣開發出來的?


FC遊戲也有類似於今天的主機遊戲的開發環境,但並不唯一。簡而言之,就是一台用於開發的電腦主機以及若干模擬外設。當然80年代的電腦主機和現在差別很大。代碼圖形也都是在這台主機上完成。編寫語言為ASM(彙編語言)。卡帶機時代主要的開發語言就是彙編,那時候不會用C語言。下圖是一些開發環境的例子,80年代初期用的是HP 64000,上面安裝的PASCAL,但並不唯一。不同廠商所使用的環境有所差異。編寫好的程序通過Emulation Probe上模擬測試,由於Emulation Probe代價很昂貴,並不是所有廠商都能有。沒有該設備的情況下,就直接通過ROM模擬器插在FC實機卡槽上測試。關於HP 64000的介紹,可以參考維基頁面HP 64000

80年代後期標準開發環境是由INTELLIGENT SYSTEMS開發制定。由一塊FC模擬板連接到富士通FMR系列電腦上進行開發調試。富士通FMR系列維基介紹FMRシリーズIS是任天堂旗下所屬公司,作為硬體和軟體的開發支援公司,同時IS也有自己的知名遊戲(火焰紋章,紙片馬里奧,高級戰爭,瓦里奧製造等)

日本FC的官方授權遊戲最後一款是1994年的冒險島4。在那之前或者之後,無論是中國國內還是國外,製作盜版的FC遊戲卡帶,都會有各自的開發硬體和模擬器。圖上這個就是個簡易的模擬板,國外FC遊戲愛好者自己做的。改造過的NES主機(美版紅白機),連接到模擬板用於調試測試。

用於燒錄測試的卡帶。

在電腦技術發達的今天,仍然會有很多懷舊愛好者會HACK或者製作新的FC遊戲。現今開發FC遊戲,基本上全部都能在windows電腦上完成了。用於模擬開發的軟體也非常齊全。比如NESASM,CC65,VirtuaNES模擬器等。當然,製作出來的遊戲,可以在模擬器上運行,但並不表示做成卡帶能在實機上玩。這時候仍然需要燒錄卡或者其他卡帶模擬設備來測試了。下圖為2010年和2012年由Sivak Games(國外民間愛好者)製作發行的戰地小子1和2的實體卡帶。(這個是美版紅白機遊戲卡帶,造型外觀都要比日版的大一圈)下圖是現在有售的通用FC燒錄卡,對於懷舊玩家來說可以在實機上玩到大部分遊戲。對於開發愛好者來說,則可以用來進行實機調試。


對nes的學習和研究我也有快十年的歷史。

剛開始是閱讀模擬器代碼,期間查漏補缺,學習硬體知識,直到最後還是從最簡單最基礎的做起,寫nes的測試程序。簡而言之,當時我連程序都不會寫,就想到寫模擬器,這是本末倒置。

去年在幾個大神的指點下,已經開始用fpga對ppu進行時序上的復刻(其實已經有國人完成這一壯舉,從晶元版圖分析電路,分析出門電路,模擬,最後用FPGA實現)。其實有很多開源的nes fpga代碼,幾乎都是功能上的模擬,不能達到時序上的一致。

回到問題上來:

NES的CPU是6502,NES代碼都是用6502的彙編語言編寫的。

為何不用C,理由很簡單,那時候C剛剛發明。此外就算現在有了C編譯器(cc65),但是效率低,佔用資源高,總之缺點很多。

筆者有幸剛工作(2007年)的時候,就參與了很多彙編語言的項目,那時彙編也早就是個老古董了,當時我也是很抗拒使用,但是後來發現真的是很奇妙,能顯著優化代碼的空間和執行時間,對處理器有了進一步的理解。

NES遊戲的開發環境:

軟體就是彙編器了

硬體的話,那個年代我不太了解。看資料說是APPLE II(基於6502)和其他的一些模擬設備等。當然現在都是先在模擬器上測試的。

怎麼才算是掌握了NES開發:

筆者以前看過一些愛好者做過的一些NES遊戲,從遊戲角度來說,可以算個遊戲了。但是從NES硬體來說,根本沒有利用NES的機能。

能明白以下幾點,可以算是了解NES部分機能

1. SMB(超級瑪麗)中橫屏滾動,魂斗羅的豎屏滾動是如何實現的?

還記得小時候,玩SMB時,MARIO走過一段後,背景往左移動(在資源匱乏的年代,這個真的是太神奇了),一直想知道,之前的背景到哪裡去了

2. SMB的分屏處理

小夥伴有沒有注意到,SMB 人物移動時候,屏幕分上下2屏,上屏的分數金幣那一欄是固定的,而下屏背景和人物是滾動的,這裡面涉及到了sprite 0 hit檢測,奧秘就在那個金幣上

3. 切BANK技術

最簡單的NES卡帶,以SMB為例,代碼/ROM佔用32K, 圖像/VROM佔用8K

但是魂斗羅的卡帶,代碼/ROM 128K,沒有圖像數據。 其中就涉及到了BANK技術,此外圖像數據也放在代碼空間中

關於1和2點

網上有SMB彙編代碼的注釋和解析,可以搜索關鍵字SMBDIS ,好複雜的系統,沒有耐心堅持下去。

後來我找到一個大神做的mario往前移動的,背景就滾動的簡單DEMO(Advanced Nerdy Nights #4 (Sprite 0 Hit for a Status Bar) ), 一下子就明白了。

關3點

利用硬體來實現的,那些硬體就是我們現在都嫌棄的74系列的TTL晶元,看大家興趣,我再寫吧。

此外我發現,寫verilog代碼如果沒有數字電路的基礎,等於白搭,我現在又重新翻數字電路)

有錯誤的地方,請指正吧

目前就寫這麼多,有需要在更新吧


推薦閱讀:

如果生化危機爆發,是人全部變成殭屍還是殭屍被人消滅?
LOL s8鱷魚怎麼打提莫?
為什麼55開十五號還能開直播?
如果我們能航行於星際,為了資源會為做出阿凡達般的事情嗎?
怎樣提高拼三階魔方速度?

TAG:紅白機 | 遊戲 | 遊戲機 |