HAM教程:: 第一天::GBA的硬件系统
由于有相当多的网站的教程讲到GBA的硬件系统,所以我将不会讲得太深入明细。然而,我将会给你讲解GBA系统的大概内容。
CPU:32bit RISC CPU ARM7TDMI(16.78 MHz)
显存:96 KB 工作内存:32KB + CPU 内部专用256KB
6个显示模式 (最大分辨率:240x160); 有四个背景层 (层或 planes);一些背景支持旋转和缩放;全部支持卷轴,马赛克,淡入淡出和Alpha混合
显示模式
Mode 0 - tile模式;屏幕由8x8 pixel的方格组成;有的4个图层; 不支持旋转和缩放;16位或256色
Mode 1 - tile模式;屏幕由8x8 pixel的方格组成;有BGs 0,1, 和 2;BG 2支持旋转和缩放;16位或256色
Mode 2 - tile模式;屏幕由 8x8 pixel 方格组成; 有BGs 2 和 3; 两者都支持旋转和缩放;256色
Mode 3 - 位图模式;线性16位色像素的缓冲区; 单缓冲;分辨率:240x160 pixel
Mode 4 - 位图模式;线性8位像素的缓冲区;8位色索引取自16位元调色板;双缓冲;分辨率:240x160 pixel
Mode 5 - 位图模式;线性16位像素的缓冲区;双缓冲;分辨率:160x128 pixel注意: 8位=256种颜色,16位 =65,536种颜色。
当在tile模式中操作的时候,你能对四背景可以通过使用不同的映像和tile独立地控制。默认的 情况下他们按3,2,1,0排列,意味着背景0会被显示在3的上面精灵,GBA在所有的模式中都支持对清灵硬件操作,精灵能够共用一个256色调色板或使用16个不同的16色调色板。精灵调色板和屏幕调色板是分开的。最多能有128个不同的精灵,大小从 8x8 到64x64 pixel。在Mode 3,4,5时用16 KB ,而 Mode 0,1,2 时用32KB的内存存放精灵的数据。
声音
GBA有4个与GB/GBC兼容的标准音乐声道。另外还有2个是允许直接声音采取。
好吧,第一天就教的就是这些。对於关於GBA 硬件的较多资讯 ,我会推荐你到以下的网站的链接:
CowBite Virtual Hardware Specifications
http://www.cs.rit.edu/~tjh8300/CowBite/CowBiteSpec.htm
Mappy VM SDK(软体开发工具)0.1 http://www.bottledlight.com/docs/sdk.html
HAM教程 ::第二天:: "Hello , World !"
是时候写一些程序了。所以看下面!
注意:记得去在编译之前将makefile拷贝到你的源文件目录中,而makefile文件你可以自己造或下载。
//主要的HAM头文件
#include "mygba.h"
int main ()
{
//初始化HAMlib
ham_Init();
/// 在指定的图层上初始化文本的显示
ham_InitText(0);
//输出一些文本
ham_DrawText(0,0,"Hello , World");
while(1)
{
//使程序无限循环
}
return 0;
}
代码解释
#include "mygba.h"
以后的程序中都需要HAM库的头文件。
ham_Init();
每个HAM程序中都必需初始化HAMlib的。
ham_InitText(0);
你能使用背景 0- 3.但你只能在背景模态式0-2中运行HAM本文系统. 记住这些是tile模式。
注意: 如果背景和背景模式现在对你一点意义也没有话,在第四或第六天之後回来.
ham_DrawText(0,0,"Hello ,World!");
参数的第一个项是行,其次是列。 举例来说 0,3 会在第一行第四列中。
水平数值: 0- 29
垂直数值: 0- 19
while (1)
没有这个,程序只会不断循环显示HAM的Logo。
好了,那第二天就是它了。 我不想今天有的复杂代码,就让我们轻松一天吧。
下载源码:
HAM Version 2.40 版和比较高的版本
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day2/makefile
main源文件: main.c http://www.aaronrogers.com/ham/Day2/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day2/hello.gba
打包下载所有的文件: Day2_Hello_World.zip
http://www.aaronrogers.com/ham/Day2/Day2_Hello_World.zip
HAM Version 2.30 版和比较低的
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day2/2.30/makefile
main源文件: main.c http://www.aaronrogers.com/ham/Day2/2.30/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day2/2.30/hello.gba
打包下载所有的文件: Day2_Hello_World.zip
http://www.aaronrogers.com/ham/Day2/2.30/Day2_Hello_World.zip
HAM 教程 :: 第三天:: 输入
由于HAM中实现输入是一件非常容易的事物。今天我们将会从第二天教程的源码中增加一些代码来示范输入函数有用法。
//主要的HAM头文件
#include "mygba.h"
int main()
{
//变量
bool dpad_pressed=0;
//初始化HAMlib
ham_Init();
// 在指定的图层上初始化文本的显示
ham_InitText(0);
//输出一些文本
ham_DrawText(0,0,"Hello, World!");
ham_DrawText(11,18," Press D-Pad To Reset");
while (!dpad_pressed)
{
// 检查输入的变化 key_pressed
if ( F_CTRLINPUT_UP_PRESSED││
F_CTRLINPUT_DOWN_PRESSED││
F_CTRLINPUT_LEFT_PRESSED││
F_CTRLINPUT_RIGHT_PRESSED)
{
dpad_pressed=1;
}
}
return 0;
}
编码解释
if( F_CTRLINPUT_UP_PRESSED...)
在循环的时候它将会对按钮进行检测,看看上 , 下 , 左或右是否按下。当按钮被按下时dpad_pressed的值变化之后,它将会离开程序并且 '复置' 游戏。
按钮 HAM中按钮的宏定义
上 F_CTRLINPUT_UP_PRESSED
下 F_CTRLINPUT_DOWN_PRESSED
左 F_CTRLINPUT_LEFT_PRESSED
右 F_CTRLINPUT_RIGHT_PRESSED
开始 F_CTRLINPUT_START_PRESSED
选择 F_CTRLINPUT_SELECT_PRESSED
B F_CTRLINPUT_B_PRESSED
A F_CTRLINPUT_A_PRESSED
L F_CTRLINPUT_L_PRESSED
R F_CTRLINPUT_R_PRESSED
注意: 在做对角线的运动时, 你能使用一些东西:
if( F_CTRLINPUT_UP_PRESSED&&F_CTRLINPUT_LEFT_PRESSED)
以后的教程中将会有一个例子。
好吧,以后的一个日子,以后的一个个别指导吧。是不是非常容易。
下载码
注意: 你可能需要到权利- 轻击而且选择救援当做。
HAM Version 2.40版和更高的版本
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day3/makefile
main源文件: main.c http://www.aaronrogers.com/ham/Day3/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day3/hello.gba
打包下载所有的文件: Day3_Input.zip http://www.aaronrogers.com/ham/Day3/Day3_Input.zip
HAM Version 2.30 版和比较低的版本
必需的HAM文件: makefile http://www.aaronrogers.com/ham/Day3/2.30/makefile
main源文件: main.c http://www.aaronrogers.com/ham/Day3/2.30/main.c
编译了二进文件: hello.gba http://www.aaronrogers.com/ham/Day3/2.30/hello.gba
打包下载所有的文件: Day3_Input.zip
http://www.aaronrogers.com/ham/Day3/2.30/Day3_Input.zip
现在看示范 http://www.aaronrogers.com/ham/Demos/Day3.php