GBA程序开发入门1

GBA程序开发入门

1.GBA简介

 

Game Boy Advanced(GBA)是日本任天堂公司于2001年推出的一款32位掌上游戏机.它着重于游戏机的便携式,并且以2D游戏为主(3D游戏依然不错).GBA有十分高效硬件图像处理加速,GBA基本上是现在全球公认的最佳的掌上游戏机.

GBA的硬件功能十分多.它的CPU是以RISC为基础的32ARM CPU,主频是16.78MHz.屏幕最大支持240x16016位真彩色显示.在图形处理方面GBA还另外提供了硬件加速,支持硬件上的图形旋转,缩放,alpha混合,face in/out淡入淡出等.

 

GBA的软件开发主要是以C语言为主,程序设计简单而且十分自由,也正是这一点吸引了许多爱好者在GBA上做东西(不一定是游戏).你完全可以把它做成PDA,做成Mp3播放器(它的声音处理方面能力也不错哦),做成随身电影播放齐,做成电子词典等,只要你有能力设计它的软件.

 

比如azhong的主页http://huangyz2002abcd.nease.net/上就有他写的WORDBOY字典软件.还有MUSIC PLAYER GBA的音乐播放器,能让GBA变身Mp3播放器.VideoGBA,能把图片转换成GBA影片的工具.不过要制做它的电影有点困难.这里提供一部已经做来的,<<黑客帝国>>的片断下载: http://213.30.21.181/web/down/show.asp?id=40&down=1

http://readboy.nease.net/上还可以找到READBOY,GBA上的读书软件,这个软件做得很不错,除了看书,甚至还可以浏览图片.

 

 

不说多了,我们还是主要来看看如何开发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加一个128MBEZ-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大概10MB.有了它,你用不着去找什么cygwin(200-300MB)和配置什么Arm Gcc,DevKitAdv已经帮你做好了一切,你只需安装它就OK.

 

ArmSDTArm公司提供的专门为ARM CPU的开发程序的C语言编译器.前面说过,GBA是采用32位的ARM CPU,所以这个ArmSDT是可以用来开发GBA程序的.而且由于ArmSDTARM公司官方的开发包,所以它的编译速度和质量上都比免费的gcc要高,但对C语言的支持也不及gcc(gcc毕竟已经成了C语言编译器的标准),最关键的问题它不是免费的,但是它的免费测试版还是可以用的.你可以到Arm公司的网站去下载ARMSDT2.51. http://www.arm.com

 

我以DevkitAdv配置的gcc为主还讲解GBA的程序开发.

安装DevKitAdv很简单,WinZipWinRAR软件解压下载文件后,双击DKA_Setup.exe,出现下面的对话框,选择安装目录,然后点击"Install"就进行安装了.整个DevKitAdv49MB,应该是十分小的.

 

 

编译器和模拟器都装好后,下面我们需要一批小工具,主要就是帮我们转换图片,声音等数据.GBA程序编译后通常都是一个rom文件,图像和声音等数据都是包含在主程序里的.这些工具能把我们电脑上的图片或声音文件转换成一个*.h头文件,然后包含在主程序里编译.关于这种转换工具也是有许多,我推荐的图形转换工具是kaleid_1-2-3,http://www.gbadev.org上下载,它可以转换我们平时用的BMP文件.声音转换工具是wav2gbac.exe,也是在http://www.gbadev.org下载,它可以转换我们平时用的WAV文件.

 

好了,下载完后这两个小工具后,准备工作就算做完了.

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
gba的开发文档。包括一份gba的cpu说明(中文翻译版)和ads环境下的gba开发模板(包括一个gba模拟器tool)。 // // HAM (c) Emanuel Schleussinger 2001/2002 // all rights reserved. // // Includes Doxygen compatible documentation // http://www.doxygen.org // /* ---------------------------------------------------------- REG_ --> Register location absolute adress of a register. includes typecasting for direct c writes. example: R_DISPCNT = value; MEN_ --> MEMORY address V_ --> Value A register related value used by macros and functions. Register Masks are also treated as values, this is currently in- consistent with C_ (constants), which they should be really. Anyone want to clean up? :-) C_ --> Constant Helpers that will never need change. holds values for bitfields that are hard to remember Also note, C_'s might get declared only once for a set of registers. If so, two rules apply: - the C_ declaration always is in the first register of the set. - the number of the register (example BG0CNT, BG1CNT) is set to C_BGXCNT. F_ --> Function a function returns a value suchas true M_ --> Macro A macro does stuff on its own, suchas switching a display mode or enabling sprites. This is what you will be using most of the time. Example: M_INTMST_ENABLE will enable interrupts TOOL_ --> Tool function Usually a collection of macros and/or functions. Propably not the fastest on earth, but very convienient. These are found at the end of the file. For example TOOL_INIT_ALL(1) sets up the display for BGMode 1 and inits sound and interrupts. Notes: ------ Some of the functions/macros are not the fastest on earth, i know that. Most of them are built for convienience rather than speed, and will suffice in the most cases. Also, please do not mail me about the fact that using REG= A | B | C | D is faster than what is being done here. I know that ;-) First of all, that only applies sometimes (if you need to set whole bitfields), and second of all, you can still do it on your own using the R_ defines. I do the same in my code, but it proves handy to have the base cases covered. Disclaimer: ----------- I'd like to be greeted in your demo if you use this header :) Be fair. Also, this source file and any other part of HAM must NOT: - be changed and redistributed as new versions, I would like to keep the main distribution point on my end. Help with any suggestions please, though. You WILL be mentioned for any help you did on HAM, and also, you can join in the team. --------------------------------------------------------- */
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值