GBA程序开发入门2

GBA开发技术 专栏收录该内容
5 篇文章 0 订阅

3.第一个GBA程序

 

现在我们开始我们的第一个GBA程序.在这个程序中我们将在屏幕上显示一张的图片.

首先你建立一张240*160大小,256色的bmp图片,比如这样:

名字就叫helloworld.bmp.打开刚才下载的Kaleid_1-2-3程序.选中菜单FileOpen,打开这个helloworld.bmp文件,再选中菜单FileConvert 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;

typedef unsigned short u16;

typedef unsigned long u32;

#define REG_DISPCNT *(u16*)0x04000000         // 显示寄存器地址

#define VRAM 0x06000000                         // 图像缓冲区地址

#define PALETTE 0x5000000                      // 调色板地址

#define MODE_4 0x04                                // mode4标志

#define BG2_ENABLE 0x0400                      // BG_2标志

#define SetMode(Mode) REG_DISPCNT=(Mode)          // 设置显示模式的宏定义

#include "helloworld.h"                               // 包含图像调色板和数据的头文件

u16* palette_mem=(u16*)PALETTE;                  // 系统调色板

u16* video_buffer=(u16*)VRAM;                        // 图像缓冲区

void Draw(u16* src_palette,u16* src_data,u16* dst_palette,u16* dst_data);

int main()

{

       // 设置屏幕模式,这里使用MODE_4

       SetMode (MODE_4 | BG2_ENABLE);

       // helloworld_palhelloworld_gfx是在"helloworld.h"定义的调色板和图像数据数组名

       Draw((u16*)helloworld_pal,(u16*)helloworld_gfx,palette_mem,video_buffer);

       // 死循环

       while(1)

       { ;}

}

// MODE_4绘图函数

void Draw(u16* src_palette,u16* src_data,u16* dst_palette,u16* dst_data)

{

       int loop,x,y;

              // 写入目的调色板

       for(loop = 0; loop < 256; loop++)

              dst_palette[loop] = src_palette[loop];

              // 写入图像缓冲区

          for(x = 0; x < 120; x++)

           for(y = 0; y < 160; y++)

         dst_data[(y) *120 + (x)]=src_data[(y) *120 + (x)];

}

 

最后建立一个编译批处理命令make.bat来帮我们编译生成目标代码.

写入下面的命令到一个新建的make.bat文件里面

 

PATH=C:/devkitadv/bin;%PATH%

gcc -lm -o main.elf main.c

objcopy -v -O binary main.elf main.bin

pause

 

如果你的devkitadv是在D,那么就应该是PATH=D:/devkitadv/bin;%PATH%,我这里的DevKitAdv是安装在C盘的.执行make.bat,如果没有错误的话就可以得到编译出来的main.binmain.elf. main.bin就是可以运行的GBArom.你可以用的模拟器VisualBoyAdvance来打开运行它,或者烧录到GBA卡带上运行.

这是在模拟器VisualBoyAdvance中运行的结果.

  • 1
    点赞
  • 2
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

devkitadv GBA开发工具 任天堂GBA官方开发包安装及开发环境的设置 Romandoo 解压安装包至某目录后,安照以下步骤操作: 一: 安装CYGWIN工具 运行CYGWIN_SETUP目录下setup.exe进行cygwin的安装 选INSTALL FROM LOCAL DIRECTORY 在SELECT INSTALL ROOT diretory 选择安装目录 next> 再NEXT 在弹出的窗口中,在Perv Curr Exp 中选Curr 点开列表栏中各项, 选 base 的 cygwin ash bash login sh-utils 选 devel 的 autoconf automake binutils gcc gdb make 选 shell下的 ash bash sh-utils 置NEW栏显示版本号,表示将其安装,而其它的工具选为skip表示跳过不安装 最后选next开始安装! (注意,我为了节省空间,我删除了许多不重要的东西,其实cygwin下有高达几百m的各式各样的工具,今后你可根据自已需要到网上下载安装去) 二、安装任天堂官方开发包 在 AGB LIBRARY3.0中点 agbsetup1安装 注意,一定要安装到c:\agb目录下,因为这是官方的默认目录,有一些例子与这个目录关连了 所以最好选这个目录 ,不然可能编不过去。否则自已设置会麻烦一点的。 修改c:\autoexec.bat 文件增加如下代码行 SET AGBDIR=C:\AGB 三、安装CYGWIN补丁 (由于刚安装完的cygwin版本并不支持arm cpu,所以需要将某些程序、库覆盖成arm相关的程序库) 将arm-thumb-elf连目录一起copy到安装好的cygwin目录的\lib\gcc-lib下 将bin-patch目录下的所有文件copy到cygwin目录的bin下面覆盖 将include patch目录下文件copy到cygwin目录的include下面 四:编绎例子程序 OK!前三步已经将我们的开发环境构好了!! 现在我们可以正式进行开发了,至于开发技术吗,在agb目录的doc下应有尽有,大家可以好好研究一下子。 下面我就介绍如何编绎代码了。 编绎也是很简单的一件事情了。 官方资料里有许多的例子,和两个游戏demo源代码。 我们就拿里面的一个具有代表性的例子编绎吧 functional_sample 在编绎之前,你必须重起你的机器,因为刚才我们修改了 autoexec.bat 而设置此时需要生效才行。(当然也有其它办法不必重起就生效,说来话长了) 好,重起之后,我们运行刚才装好的cygwin程序 进入了一个控制台窗口 这个控制台shell,命令行支持的是类式linux的指令,你可能不太了解,不过你不用担心呵 我们不需要记太多的命令指令,很简单的几句这可以了 就当是dos命令,只不过命令名称变了而已 下面是几个对应 ls 相当于dos下的dir指令 cd 相当于dos下的cd 指令 你也就需要这两个指令就搞定了,呵 行,那么我们正式开始: cd c: cd agb cd src cd samples cd functional_sample //以上几步作的就是进入c:\agb\src\samples\functional_sample目录下,和dos一样吧,呵 然后注意了,忘了提醒有关functional_sample这个例子的一个问题, 就是这个例子源代码share.c 中定义了 vu16 Cont; vu16 Trg; 但是在share.h中又申明为 extern u16 Cont; extern u16 Trg; 该编绎器检查认为是错误,所以你要改一下 将share.h文件里改成 extern vu16 Cont; extern vu16 Trg; 否则编绎报错。 好,改好share.h之后,我们输入 make 回车! 好,你可以看到现在开始正式编绎了,太爽了,官方的例子在被编绎,呵 过了几十秒编绎完成之后,就会生成了bin与elf文件 你用visualBoyAdvance打开bin文件看一看是 什么例子,哇,原来是个非常强的GBA各个功能展示,有alpha混合,有图层显示 有马塞可显示,有放大缩小,有精灵移动,旋转,字体显示,声音,有地图显示,有窗口模式。 但是需要注意的一个问题:::::: 如果你想使用gcc里面的库函数 需要在makefile里面修改一下 CFLAGS 中加入 -I"C:\cygwin\include" LDFLAGS 中加入 -lm 否则你将无法使用sin,cos,sqrt等有用的库函数 编完这个,你可以再去试试看
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值