最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

夢(mèng)開(kāi)始的地方——FC游戲開(kāi)發(fā)指南(2)軟硬件架構(gòu)

2021-10-10 16:52 作者:皮皮關(guān)做游戲  | 我要投稿

(本系列是一個(gè)回歸電子游戲原點(diǎn)的特別系列,作者 @goodorc_gamedev

我暫時(shí)不直接講FC具體開(kāi)發(fā)過(guò)程,而是打算慢慢介紹FC系統(tǒng)的開(kāi)發(fā)思路。

如果直接從具體代碼開(kāi)始,會(huì)讓讀者有“身在此山中,不識(shí)真面目”的感覺(jué);當(dāng)然也不能脫離代碼,空談架構(gòu),失去了本系列的意義。

希望這種介紹方式能讓大家逐步理解早期游戲主機(jī)與現(xiàn)代PC系統(tǒng)的巨大差異,能夠感受到在2021年研究FC的樂(lè)趣。

1、為游戲而生的硬件系統(tǒng)

FC紅白機(jī),從技術(shù)本質(zhì)上看是一臺(tái)簡(jiǎn)易單片機(jī)系統(tǒng)。

  1. 它具有一個(gè)核心CPU,以及較小的內(nèi)存(內(nèi)存可以集成在CPU內(nèi),也可以外置)。

  2. 在電路板上包含一些外圍電路和芯片,外圍芯片一般負(fù)責(zé)輸入輸出、聲音播放、內(nèi)存擴(kuò)展等。

  3. CPU和外圍電路之間通過(guò)已經(jīng)焊死的線路進(jìn)行通信。只要寫(xiě)特定的匯編指令,就能和外圍電路通信發(fā)送、接收數(shù)據(jù)。(讀者不要怕,只要調(diào)用C函數(shù)就行)

  4. 整套系統(tǒng)中,沒(méi)有操作系統(tǒng),沒(méi)有內(nèi)存管理。只要一插電就會(huì)按預(yù)定方式運(yùn)行。所有變量和內(nèi)存一開(kāi)始都要安排好內(nèi)存位置。

  5. CPU會(huì)忠實(shí)的一條一條執(zhí)行程序指令,沒(méi)有報(bào)錯(cuò)機(jī)制、沒(méi)有異常處理,就和一臺(tái)機(jī)械鐘表一樣嚴(yán)格運(yùn)行。

  6. 如果代碼寫(xiě)錯(cuò),可能會(huì)黑屏、花屏、死循環(huán)等等。但從底層視角看來(lái),一個(gè)游戲花屏了和正常運(yùn)行也沒(méi)什么區(qū)別,一樣都是運(yùn)行狀態(tài)。

  7. 不用考慮程序如何停止,CPU會(huì)這樣永遠(yuǎn)運(yùn)行下去,直到斷電。

按理來(lái)說(shuō),一臺(tái)像這樣主頻僅有1.8Mhz,內(nèi)存2KB的單片機(jī),不可能實(shí)現(xiàn)《超級(jí)瑪麗》、《魂斗羅》這樣豐富多彩的實(shí)時(shí)游戲。

但FC就做到了,關(guān)鍵技術(shù)有兩個(gè),一是外圍有專(zhuān)門(mén)的顯示芯片(PPU,可以直接向電視機(jī)輸出信號(hào),含2KB顯存);二是軟硬件緊密結(jié)合,做到?jīng)]有“游戲引擎層”,爭(zhēng)取不浪費(fèi)任何一點(diǎn)性能。

FC的軟硬件結(jié)合有多么緊密呢?就連“1.8Mhz”這個(gè)CPU頻率都與FC的顯示分辨率相關(guān)。頻率差一點(diǎn),連顯示都會(huì)錯(cuò)亂。

比如,舊的彩色電視標(biāo)準(zhǔn)有兩套:歐標(biāo)PAL和美標(biāo)NTSC,二者的顯像管刷新頻率不同。FC如何兼容兩套標(biāo)準(zhǔn)呢?

答案是:不考慮兼容。生產(chǎn)兩種不兼容的主機(jī),負(fù)責(zé)顯示的PPU型號(hào)不同,連CPU也略有區(qū)別。

美國(guó)NTSC制式:

CPU 2A03 @ 1.79MHz,PPU?2C02 @ 5.37MHz

日本PAL制式:

CPU 2A07 @ 1.66MHz,PPU?2C07 @ 5.32Mhz

電視信號(hào)頻率決定了PPU頻率設(shè)計(jì),而CPU頻率必須照顧PPU頻率。三者就是這樣的連帶關(guān)系。

頻率正確時(shí),正好能保證PPU每刷新一行正好是CPU的一個(gè)周期。這樣就不用添加額外的定時(shí)系統(tǒng)。

這種硬件更像是一套精密的機(jī)械結(jié)構(gòu),牽一發(fā)而動(dòng)全身,幾乎沒(méi)有智能性。

CRT電視機(jī)內(nèi)部。前面是屏幕,一個(gè)像素被電子束打到會(huì)發(fā)亮。后面是一個(gè)高速掃描的電子發(fā)射器。

在開(kāi)發(fā)的過(guò)程中,雖然我們寫(xiě)的是C語(yǔ)言代碼,但是大腦中還要記得有一個(gè)PPU正在與代碼協(xié)同工作。理解這一點(diǎn)對(duì)理解時(shí)序問(wèn)題比較重要。

2、1984年的游戲開(kāi)發(fā)環(huán)境

其實(shí)FC硬件定稿時(shí),包括開(kāi)發(fā)團(tuán)隊(duì)本身在內(nèi),所有人對(duì)于FC游戲到底怎么寫(xiě)、硬件機(jī)能到底有多高、音頻芯片怎么用、PPU怎么用,只有很粗淺的認(rèn)識(shí)。

比如說(shuō),F(xiàn)C具有完善的“背景卷動(dòng)”機(jī)制。但最早的《大金剛》、《大力水手》等游戲,大都采用固定版面。

FC早期任天堂自己推出了《馬里奧》一代,是當(dāng)年絕對(duì)的劃時(shí)代大作,逼真的物理效果、背景卷動(dòng)等FC功能基本都用到了,給后來(lái)者做出了示范。

我想說(shuō)的是——你可以將FC看成一套簡(jiǎn)陋而沒(méi)什么規(guī)矩的游戲引擎,很多高級(jí)功能的實(shí)現(xiàn),依靠的是程序員的聰明才智,將簡(jiǎn)陋的硬件水平發(fā)揮到極致。

(比如《馬里奧3代》中的大部分功能,在早期都是不可想象的高科技。舉個(gè)例子,這游戲竟然可以同時(shí)上下左右背景卷軸????!硬件根本就沒(méi)提供這個(gè)功能。)


但老任的技術(shù)不是那么容易學(xué)會(huì)的,當(dāng)年可是基本軟件極度缺乏、也沒(méi)有互聯(lián)網(wǎng)的年代,那時(shí)候的技術(shù)文檔寫(xiě)得晦澀難懂,而且即便是爛文檔都非常稀缺。不僅FC的開(kāi)發(fā)機(jī)要花重金購(gòu)買(mǎi),買(mǎi)來(lái)還得自己死磕研究。那時(shí)候的開(kāi)發(fā)環(huán)境之恐怖,連1970年代出生的開(kāi)發(fā)者都很難想像。

就算南夢(mèng)宮這樣的名廠也得死磕技術(shù)文檔,從《吃豆人》做起,慢慢積累慢慢研究。

不過(guò),當(dāng)年的開(kāi)發(fā)者也有一點(diǎn)與現(xiàn)在不同——現(xiàn)代開(kāi)發(fā)者屬于純軟件開(kāi)發(fā)者,對(duì)硬件知之甚少。而當(dāng)年所有的程序員都略懂硬件,二進(jìn)制、單片機(jī)、匯編對(duì)他們來(lái)說(shuō)屬于基礎(chǔ)知識(shí)。

所以,對(duì)我們很難的地方對(duì)他們來(lái)說(shuō)可能沒(méi)那么難。

3、FC硬件架構(gòu)

下圖是我翻譯的FC硬件架構(gòu)圖。來(lái)源:http://nerdlypleasures.blogspot.com/2015/06/nes-hardware-explained.html

主要的芯片模塊圖中已經(jīng)標(biāo)的很清楚了。

值得說(shuō)明的是,F(xiàn)C卡帶在插上以后,其實(shí)已經(jīng)成為了整個(gè)系統(tǒng)的一部分,所以原理上就不可能實(shí)現(xiàn)“熱插拔”卡帶,玩游戲過(guò)程中拔卡必然會(huì)死機(jī);換卡之后必然要重啟系統(tǒng)。

從原理上看,卡帶并非軟件,而是硬件的一部分。

后期游戲?yàn)榱嗽鰪?qiáng)功能,還在卡帶中添加了專(zhuān)用芯片、附加顯存、附加存檔區(qū)域等等,可以看成一個(gè)“子系統(tǒng)”。


本期先到這里,下一期我將介紹FC的游戲引擎主循環(huán)寫(xiě)法。


(本文作者 @goodorc_gamedev。歡迎加入游戲開(kāi)發(fā)群:1082025059

對(duì)游戲開(kāi)發(fā)感興趣的童鞋可去到這里進(jìn)一步了解:http://www.levelpp.com/)



夢(mèng)開(kāi)始的地方——FC游戲開(kāi)發(fā)指南(2)軟硬件架構(gòu)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
镶黄旗| 巴马| 景泰县| 黄骅市| 西林县| 和政县| 大理市| 武隆县| 沂水县| 娱乐| 泗洪县| 射洪县| 上犹县| 祁门县| 赤城县| 安溪县| 芦溪县| 乡城县| 凤山市| 桂东县| 东平县| 芦溪县| 建宁县| 滁州市| 洪雅县| 敖汉旗| 武城县| 山西省| 十堰市| 普格县| 莱西市| 梅河口市| 海宁市| 台东县| 清镇市| 桐庐县| 萍乡市| 泰兴市| 奉节县| 五台县| 昌乐县|