當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]在上世紀(jì)90年代,游戲開始在計(jì)算機(jī)世界中蔓延。我還記得第一次玩Wolfenstein 3D,那是第一款3D的PC射擊游戲。它由IdSoftware于1992年開發(fā),是Doom的前身。Wolfenstein 3D證明PC的圖形能力已足以滿足這種類型3D動(dòng)畫的

在上世紀(jì)90年代,游戲開始在計(jì)算機(jī)世界中蔓延。我還記得第一次玩Wolfenstein 3D,那是第一款3D的PC射擊游戲。它由IdSoftware于1992年開發(fā),是Doom的前身。Wolfenstein 3D證明PC的圖形能力已足以滿足這種類型3D動(dòng)畫的開發(fā)。90年代很多十幾歲的年青人都會(huì)記得Wolfenstein 3D,因?yàn)檫@是第一款把3D世界帶到他們PC上的游戲。90年代中期它的源碼在互聯(lián)網(wǎng)上公開,現(xiàn)在還能找到?,F(xiàn)在我想再玩這款游戲,但不是在我的PC上。我將利用一只微控制器的功率和集成度。


 隨著微控制器性能增強(qiáng),已經(jīng)有可能用它們執(zhí)行一些在90年代還需要PC處理能力的程序,而游戲領(lǐng)域的應(yīng)用受這一進(jìn)展影響很大?,F(xiàn)在可以在某種移動(dòng)應(yīng)用(包含圖形LCD和一個(gè)32位 ARM微控制器)中實(shí)現(xiàn)第一個(gè)PC上的3D游戲。本文將闡述如何將一個(gè)開源PC游戲的代碼移植到一款有適當(dāng)源文件結(jié)構(gòu)的微控制器上。

  這里需要補(bǔ)充一句:本文并不打算分析Wolfenstein 3D的源碼。很多文章已經(jīng)做過這件事了。本文的目標(biāo)是說明將復(fù)雜代碼移植到新平臺(tái)上的方法。不過,這款游戲的結(jié)構(gòu)做得很好,解釋一下還是很有意思的。事實(shí)上在1992年,Wolfenstein 3D在3D游戲領(lǐng)域是一場(chǎng)革命。它是第一款玩家能在3D場(chǎng)景中自由移動(dòng)的游戲。

  在此游戲中,圖像與源碼同等重要,因?yàn)樗捎昧舜罅抠N圖和子畫面。這些都采用光線投射(Ray Casting)方法定位在屏幕上,從而給游戲以一種3D效果。光線投射包含了從一個(gè)POV(視點(diǎn))的投射半徑。并采用了一系列技巧以實(shí)現(xiàn)加速。例如,為了在像素點(diǎn)屏幕上投射一個(gè)半徑,要做一個(gè)空間搜索,以找到該半徑與最近墻上的交匯點(diǎn)。在Wolfenstein 3D中,墻面和貼圖的尺寸都是64 x 64像素(見圖3)。

  雖然該游戲在當(dāng)時(shí)取得了無比的成功,但它也有一些局限。其中之一是墻的高度全都一樣,它們?nèi)?0°,沒有斜角。這些限制減輕了移植的難度,因?yàn)樗鼈兇碇创a不太復(fù)雜。另一個(gè)限制是地面和天花板沒有貼圖。

  我會(huì)嘗試在一只較新的32位微控制器上給這款游戲以新的生命。一個(gè)必需的部件是建立一個(gè)控制游戲的應(yīng)用電路板。從用戶角度只有兩個(gè)東西是可見的,一個(gè)240 x 320 TFT彩色屏幕,以及一組讓玩家在Wolfenstein 3D迷宮中穿越的按鍵。另外,微控制器用于屏幕和按鍵管理。由于這種類型屏幕采用一種并行接口(16位寬),需要選擇一種能夠驅(qū)動(dòng)這種屏幕的微控制器?!∪绾胃樌匾浦苍创a?

  Wolfenstein 3D的源碼相當(dāng)復(fù)雜。源碼越復(fù)雜,控制它就越難。因此,將這個(gè)應(yīng)用移植到一個(gè)新的目標(biāo)上非常困難。在開始以前,重要的是了解用于編寫原應(yīng)用的語言是否為可移植的,而且該語言的的編譯器是否能用于新的目標(biāo)。Wolfenstein 3D采用C語言編寫。C語言有利于移植,因?yàn)樗谖⒖刂破黝I(lǐng)域廣泛可用,市場(chǎng)上現(xiàn)有很多編譯器與調(diào)試器。

  C語言允許一個(gè)源碼對(duì)多個(gè)目標(biāo),前提是它采用一種邏輯和清楚的方式編寫。項(xiàng)目源文件的組織是一個(gè)考慮因素。圖4提出了一種方法。

  圖示的軟件方法將原始源碼與應(yīng)用板使用的物理層分隔開來。移植過程中,原始游戲的源碼必須作少許修改,用到硬件的函數(shù)必須轉(zhuǎn)移(并修改)到“可移植”段。

  當(dāng)你準(zhǔn)備將一個(gè)程序移植到一個(gè)新的目標(biāo)時(shí),主要問題是“哪種新目標(biāo)機(jī)能夠執(zhí)行這個(gè)程序?”要理解這個(gè)需求,就需要知道源碼的主要功能,如外設(shè)的類型和數(shù)量,以及內(nèi)存的大?。╓olfenstein 3D需要至少500KB程序空間和96KB RAM空間)。

  應(yīng)用的核心必須是一只32位微控制器,因?yàn)閃olfenstein 3D的執(zhí)行要求高性能的算術(shù)計(jì)算,用于光線投射方法和刷新屏幕的執(zhí)行速度,8位或16位微控制器無法達(dá)到這種性能水平。另外,為了簡(jiǎn)化電路板布局,需要選擇一款嵌入了程序內(nèi)存(閃存)的微控制器?,F(xiàn)在,市場(chǎng)上存在著大量這類32位微控制器,但ARM處理器是嵌入式應(yīng)用的標(biāo)準(zhǔn)處理器。

  我選擇的是意法半導(dǎo)體公司的STM32,因?yàn)樗捎昧艘粋€(gè)ARM Cortex-M3核心,專為嵌入式應(yīng)用而開發(fā)。請(qǐng)?jiān)试S我介紹這個(gè)STM32 32bit閃存微控制器系列,尤其是STM32F103ZE產(chǎn)品。
STM32F103ZE運(yùn)行頻率最高可達(dá)72MHz,應(yīng)用電源為2.0V至3.6V。它提供512KB閃存和64KB RAM。外存控制(靈活的靜態(tài)內(nèi)存控制,F(xiàn)SMC)可使STM32F10xxx微控制器與各種存儲(chǔ)器接口(SRAM、NOR閃存...)。FSMC有16根數(shù)據(jù)線和26根地址線,可用五根獨(dú)立的片選腳,最多連接64MB內(nèi)存。在Wolfenstein 3D應(yīng)用板上,這個(gè)接口用于驅(qū)動(dòng)TFT顯示器和外接的4MB SRAM高速異步內(nèi)存。鍵盤由通用IO直接驅(qū)動(dòng)。應(yīng)用板為3V工作,采用3只1.2V電池與一只
LM317可調(diào)穩(wěn)壓器的組合。

  意法半導(dǎo)體提供一個(gè)非常有用的軟件庫,它包含很多STM32功能管理實(shí)例。在這次移植中,軟件庫用于編寫TFT顯示器硬件的驅(qū)動(dòng)。圖5表示架構(gòu)需要的項(xiàng)目,Wolfenstein 3D文件夾包含兩個(gè)子文件夾。

  Appli文件夾包含IDE項(xiàng)目以及硬件驅(qū)動(dòng)源碼,如TFT屏幕。該文件夾包含硬件應(yīng)用板的說明(在我們這里是STM3210E-EVAL),它還包含了STM32庫,用于管理電路板硬件和IDE項(xiàng)目。Wolfenstein 3D的源碼用庫函數(shù)作硬件驅(qū)動(dòng)。

  “source”文件夾包含了Wolfenstein 3D的原始源碼,源碼中所有指令或函數(shù)都不與應(yīng)用板硬件直接交互,子文件夾“portable”包括用于在游戲原始代碼與代碼執(zhí)行目標(biāo)硬件之間建立連接的函數(shù)。在我們這種情況下,我們還有一個(gè)子文件夾STM3210E-EVAL,這個(gè)文件夾包含調(diào)用應(yīng)用板硬件的函數(shù)?!∽屛覀兛匆幌嘛@示管理的例子。Wolfenstein 3D源碼包含一個(gè)VW_UpdateScreen函數(shù),這個(gè)函數(shù)根據(jù)內(nèi)部視頻緩沖的內(nèi)容刷新TFT屏幕,于是需要驅(qū)動(dòng)TFT屏幕。因此,它必須在文件夾“portable/STM3210E-EVAL”中定義。VW_UpdateScreen函數(shù)會(huì)調(diào)用在文件夾“appli/ STM3210E-EVAL”中定義的基本函數(shù)(驅(qū)動(dòng))。

  文件夾“source/portable/STM3210E-EVAL/”包含與編譯器兼容的類型說明與定義。通過這種方法處理,就能夠?qū)⒁粋€(gè)目標(biāo)的源碼移植到另一個(gè)目標(biāo),而無需修改復(fù)雜的源文件。舉個(gè)有用的例子,源碼要轉(zhuǎn)換到一個(gè)不同映射的STM32應(yīng)用,它有不同的接口硬件,或編譯器有改變。這時(shí)只需要為新的目標(biāo)更新“appli/STM3210E-EVAL/”和“source/portable/STM3210E-EVAL/”文件夾中的約束文件。結(jié)果在圖6中。它看似90年代的一款口袋機(jī)游戲。

  采用C編寫的老式PC游戲的源碼現(xiàn)在仍能從互聯(lián)網(wǎng)上獲得。多虧有微控制器的強(qiáng)大性能和LCD顯示器的集成,我們現(xiàn)在還能體驗(yàn)到這些游戲。

Captions:
 


 



 

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉