<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 怎樣將一個(gè)開(kāi)源游戲移植給一款32位微控制器

怎樣將一個(gè)開(kāi)源游戲移植給一款32位微控制器

作者: 時(shí)間:2011-06-04 來(lái)源:網(wǎng)絡(luò ) 收藏

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

本文引用地址:http://dyxdggzs.com/article/172705.htm


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

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

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

  雖然該游戲在當時(shí)取得了無(wú)比的成功,但它也有一些局限。其中之一是墻的高度全都一樣,它們全是90°,沒(méi)有斜角。這些限制減輕了的難度,因為它們代表著(zhù)源碼不太復雜。另一個(gè)限制是地面和天花板沒(méi)有貼圖。

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

  Wolfenstein 3D的源碼相當復雜。源碼越復雜,控制它就越難。因此,將這個(gè)應用移植到一個(gè)新的目標上非常困難。在開(kāi)始以前,重要的是了解用于編寫(xiě)原應用的語(yǔ)言是否為可移植的,而且該語(yǔ)言的的編譯器是否能用于新的目標。Wolfenstein 3D采用C語(yǔ)言編寫(xiě)。C語(yǔ)言有利于移植,因為它在微控制器領(lǐng)域廣泛可用,市場(chǎng)上現有很多編譯器與調試器。

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

  圖示的軟件方法將原始源碼與應用板使用的物理層分隔開(kāi)來(lái)。移植過(guò)程中,原始游戲的源碼必須作少許修改,用到硬件的函數必須轉移(并修改)到“可移植”段。

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

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

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

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

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

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

  文件夾“source/portable/STM3210E-EVAL/”包含與編譯器兼容的類(lèi)型說(shuō)明與定義。通過(guò)這種方法處理,就能夠將一個(gè)目標的源碼移植到另一個(gè)目標,而無(wú)需修改復雜的源文件。舉個(gè)有用的例子,源碼要轉換到一個(gè)不同映射的STM32應用,它有不同的接口硬件,或編譯器有改變。這時(shí)只需要為新的目標更新“appli/STM3210E-EVAL/”和“source/portable/STM3210E-EVAL/”文件夾中的約束文件。結果在圖6中。它看似90年代的一款口袋機游戲。

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

Captions:



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>