1.GBA簡介
Game Boy Advanced(GBA)是日本任天堂公司於2001年推出的一款32位掌上游戲機。它着重於遊戲機的便攜式,並且以2D遊戲爲主(3D遊戲依然不錯)。GBA有十分高效硬件圖像處理加速,GBA基本上是現在全球公認的最佳的掌上游戲機。
GBA的硬件功能十分多。它的CPU是以RISC爲基礎的32位ARM CPU,主頻是16.78MHz。屏幕最大支持240x160的16位真彩色顯示。在圖形處理方面GBA還另外提供了硬件加速,支持硬件上的圖形旋轉,縮放,alpha混合,face in/out淡入淡出等。
GBA的軟件開發主要是以C語言爲主,程序設計簡單而且十分自由,也正是這一點吸引了許多愛好者在GBA上做東西(不一定是遊戲)。你完全可以把它做成PDA,做成Mp3播放器(它的聲音處理方面能力也不錯哦),做成隨身電影播放齊,做成電子詞典等,只要你有能力設計它的軟件。
不說多了,我們還是主要來看看如何開發GBA的軟件。應該說,你只要會點C語言,就可以進入GBA的開發行列中了。在GBA上寫程序比在電腦上寫程序更簡單。GBA是單總線的設計,也就是說通過簡單的讀寫命令就能完成所有的內部硬件操作。訪問GBA內部的寄存器就猶如訪問一塊內存一樣簡單,而GBA所有的功能都是通過讀寫寄存器而完成的。
2.GBA程序開發準備
GBA開發所需要的東西除了一臺可以用的電腦外,主要就是一個編譯器和一個GBA模擬器。
有了GBA模擬器,你就可以在你的電腦上運行GBA程序了。GBA模擬器應該是到處可以找得到的。我推薦的是VisualBoyAdvance。你可以在www.gbadev.org上下載最新的版本。如果你還想把你的程序弄到GBA機器上玩,那麼除了應該有個GBA外,還應該有個ROM燒錄器。比如EZ-Flash。通過它可以把電腦上的ROM燒錄到GBA卡帶上,然後放到GBA上運行。(總共一個GBA加一個128MB的EZ-Flash大概是1000元人民幣)
GBA程序開發可以用匯編語言和C/C++語言來寫程序,不過彙編語言比較複雜,而且不是我們平常使用8086彙編,而是Arm彙編。任天堂公司可能覺得C++程序運行消耗太大,不推薦C++語言來開發,所以我們都一直將C語言作爲首選。
GBA開發所用的C語言編譯器主要有兩種,一種是免費的gcc,一種是Arm公司提供的ArmSDT。
這裏的gcc當然不是簡單的linux下的gcc,而是Arm Gcc。簡單地說就是把我們平時常見的gcc改造成生成ARM CPU代碼的gcc。你可能會問難道我們要使用linux操作系統了嗎?其實我們還是在windows下做GBA開發,雖然gcc主要是在linux下的東西,但是我們也可以從cygwin(在windows下模擬UNIX的工具)中得到在windows下運行的gcc。你可以根據這個cygwin下的gcc,自己去配置Arm Gcc,也可以直接去下載個配置好了的Arm Gcc。比如DevKitAdv,你可以到http://www.gbadev.org去下載這個軟件。DevKitAdv大概10多MB。有了它,你用不着去找什麼cygwin(200-300MB)和配置什麼Arm Gcc了,DevKitAdv已經幫你做好了一切,你只需安裝它就OK了。
ArmSDT是Arm公司提供的專門爲ARM CPU的開發程序的C語言編譯器。前面說過,GBA是採用32位的ARM CPU,所以這個ArmSDT是可以用來開發GBA程序的。而且由於ArmSDT是ARM公司官方的開發包,所以它的編譯速度和質量上都比免費的gcc要高,但對C語言的支持也不及gcc好(gcc畢竟已經成了C語言編譯器的標準),最關鍵的問題它不是免費的,但是它的免費測試版還是可以用的。你可以到Arm公司的網站去下載ARMSDT2.51. http://www.arm.com。
我以DevkitAdv配置的gcc爲主還講解GBA的程序開發。
安裝DevKitAdv很簡單,用WinZip或WinRAR軟件解壓下載文件後,雙擊DKA_Setup.exe,出現下面的對話框,選擇安裝目錄,然後點擊"Install"就進行安裝了。整個DevKitAdv共49MB,應該是十分小的。
編譯器和模擬器都裝好後,下面我們需要一批小工具,主要就是幫我們轉換圖片,聲音等數據。GBA程序編譯後通常都是一個rom文件,圖像和聲音等數據都是包含在主程序裏的。這些工具能把我們電腦上的圖片或聲音文件轉換成一個*.h頭文件,然後包含在主程序裏編譯。關於這種轉換工具也是有許多,我推薦的圖形轉換工具是kaleid_1-2-3,在http://www.gbadev.org上下載,它可以轉換我們平時用的BMP文件。聲音轉換工具是wav2gbac.exe,也是在http://www.gbadev.org下載,它可以轉換我們平時用的WAV文件。
好了,下載完後這兩個小工具後,準備工作就算做完了。
3.第一個GBA程序
現在我們開始我們的第一個GBA程序。在這個程序中我們將在屏幕上顯示一張的圖片。
首先你建立一張240*160大小,256色的bmp圖片,比如這樣:
名字就叫helloworld.bmp.打開剛纔下載的Kaleid_1-2-3程序。選中菜單File中Open,打開這個helloworld.bmp文件,再選中菜單File中Convert and Save.出現對話框:
如圖一樣選擇各項選擇,特別注意的是一定要選擇“BitMap Graphics(Mode 4)”和“Save As C Source”,並且去掉“#include <agbtypes.h>”的選擇。最後單擊“Convert and Save”,保存爲helloworld.h。
圖像數據已經轉換好了,接着我們開始寫代碼。建立個main.c的文件,並把helloworld.h放在一個目錄下。然後在main.c中寫下代碼:
typedef unsigned char u8; |
最後建立一個編譯批處理命令make.bat來幫我們編譯生成目標代碼。
寫入下面的命令到一個新建的make.bat文件裏面
PATH=C:/devkitadv/bin;%PATH% |
如果你的devkitadv是在D盤,那麼就應該是PATH=D:/devkitadv/bin;%PATH%,我這裏的DevKitAdv是安裝在C盤的。執行make.bat,如果沒有錯誤的話就可以得到編譯出來的main.bin和main.elf. main.bin就是可以運行的GBA的rom.你可以用的模擬器VisualBoyAdvance來打開運行它,或者燒錄到GBA卡帶上運行。
這是在模擬器VisualBoyAdvance中運行的結果。
下面我將一一講解上面的程序
前三行:
typedef unsigned char u8; |
定義GBA程序自己的數據類型,因爲這樣我們就很容易知道每個數據在GBA中佔的字節數。
#define REG_DISPCNT *(u16*)0x04000000// 顯示寄存器地址 |
REG_DISPCNT是設置顯示模式的寄存器.GBA中有mode0-mode5六個顯示模式。我們這個程序的顯示模式是mode4,也就是240x160的8位色(256色)的雙緩衝顯示模式。比如mode3,就是240x160的16位真彩色的單緩衝顯示模式。
#define VRAM 0x06000000// 圖像緩衝區地址 |
VRAM就是GBA的顯示內存,簡單地說VRAM中的數據就是屏幕上的圖象。跟我們的平常用的計算機一樣的。PALETTE就是調色板地址,簡單地說就是裝圖像調色板的地方。
#define MODE_4 0x04 |