国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

如何將一個開源游戲移植給一款32位微控制器

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

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




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

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






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

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

如何更順利地移植源碼?

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

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




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

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

應(yīng)用的核心必須是一只32位微控制器,因為Wolfenstein 3D的執(zhí)行要求高性能的算術(shù)計算,用于光線投射方法和刷新屏幕的執(zhí)行速度,8位或16位微控制器無法達(dá)到這種性能水平。另外,為了簡化電路板布局,需要選擇一款嵌入了程序內(nèi)存(閃存)的微控制器。現(xiàn)在,市場上存在著大量這類32位微控制器,但ARM處理器是嵌入式應(yīng)用的標(biāo)準(zhǔn)處理器。
我選擇的是意法半導(dǎo)體公司的STM32,因為它采用了一個ARM Cortex-M3核心,專為嵌入式應(yīng)用而開發(fā)。請允許我介紹這個STM32 32bit閃存微控制器系列,尤其是STM32F103ZE產(chǎn)品。

STM32F103ZE運行頻率最高可達(dá)72MHz,應(yīng)用電源為2.0V至3.6V。它提供512KB閃存和64KB RAM。外存控制(靈活的靜態(tài)內(nèi)存控制,F(xiàn)SMC)可使STM32F10xxx微控制器與各種存儲器接口(SRAM、NOR閃存...)。FSMC有16根數(shù)據(jù)線和26根地址線,可用五根獨立的片選腳,最多連接64MB內(nèi)存。在Wolfenstein 3D應(yīng)用板上,這個接口用于驅(qū)動TFT顯示器和外接的4MB SRAM高速異步內(nèi)存。鍵盤由通用IO直接驅(qū)動。應(yīng)用板為3V工作,采用3只1.2V電池與一只LM317可調(diào)穩(wěn)壓器的組合。

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




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

“source”文件夾包含了Wolfenstein 3D的原始源碼,源碼中所有指令或函數(shù)都不與應(yīng)用板硬件直接交互,子文件夾“portable”包括用于在游戲原始代碼與代碼執(zhí)行目標(biāo)硬件之間建立連接的函數(shù)。在我們這種情況下,我們還有一個子文件夾STM3210E-EVAL,這個文件夾包含調(diào)用應(yīng)用板硬件的函數(shù)。

讓我們看一下顯示管理的例子。Wolfenstein 3D源碼包含一個VW_UpdateScreen函數(shù),這個函數(shù)根據(jù)內(nèi)部視頻緩沖的內(nèi)容刷新TFT屏幕,于是需要驅(qū)動TFT屏幕。因此,它必須在文件夾“portable/STM3210E-EVAL”中定義。VW_UpdateScreen函數(shù)會調(diào)用在文件夾“appli/ STM3210E-EVAL”中定義的基本函數(shù)(驅(qū)動)。

文件夾“source/portable/STM3210E-EVAL/”包含與編譯器兼容的類型說明與定義。通過這種方法處理,就能夠?qū)⒁粋目標(biāo)的源碼移植到另一個目標(biāo),而無需修改復(fù)雜的源文件。舉個有用的例子,源碼要轉(zhuǎn)換到一個不同映射的STM32應(yīng)用,它有不同的接口硬件,或編譯器有改變。這時只需要為新的目標(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)在還能體驗到這些游戲。
本文地址:http://m.qingdxww.cn/thread-2934-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 無線充電基礎(chǔ)知識及應(yīng)用培訓(xùn)教程3
  • 了解一下Microchip強(qiáng)大的PIC18-Q24 MCU系列
  • 5分鐘詳解定時器/計數(shù)器E和波形擴(kuò)展!
  • 無線充電基礎(chǔ)知識及應(yīng)用培訓(xùn)教程2
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 看免费5xxaaa| 91热成人精品国产免费 | 亚洲黄网址 | 欧美色欧美亚洲另类 | 国产91精品黄网在线观看 | 99精品视频在线免费观看 | 国产三级久久久精品三级 | 高清色黄毛片一级毛片 | 青青综合在线 | 青青草国产精品欧美成人 | 日韩四区 | 精品99牛牛视频 | 中文字幕在线观看日本 | 老师的兔子又大又好吃又多 | 男人天堂网页 | 国产精品久久久久久久久久免费 | 欧美精品手机在线 | 欧美日韩精品一区二区在线线 | 91精品在线观看视频 | 男人社区天堂 | 天天操天天干天天操 | 偷拍第一页 | 在线观看日本免费不卡 | 成人在线中文字幕 | 久久免费视频观看 | 中文字幕亚洲色图 | 一区二区三区高清在线观看 | 成人在线不卡 | 日本一区二区三区久久精品 | 午夜在线免费视频 | 日韩黄a级成人毛片 | 高清欧美一区二区免费影视 | 亚洲国产精 | 亚洲图片第一页 | 最近新韩国日本免费看 | 久久手机视频 | 78视频在线观看免费播放 | 久久国产高清 | 99影视在线视频免费观看 | 四虎网站在线 | 国产99视频精品免费视频免里 |