GBA开发入门:做一个名叫Hello World的游戏


貌似这年头关于GBA开发的教程都快绝迹了。。。
本文是基于 https://www.cnblogs.com/BG5SBK/archive/2006/07/19/454224.html 的内容,对细节地方进行了再次整理
(其实上面的链接也是转载,但链接里面的真实原文链接早已失效,只剩下了转载的GBA教程。。。)
鉴于原文中提及的许多链接均已失效,我就挑些重点说一下

PS:博主的操作系统是win10 64位的,但是有一个VMware~
	于是在虚拟机里面装了一个Ubuntu和一个32位的Win7~
	Ubuntu比较容易安装,关于Windows的安装方法详见:https://blog.csdn.net/u012230668/article/details/81701893
	所以在下文的测试中我会在三个环境中跳来跳去~请不要介意。。。但所有实质性的内容都可以在win10系统内完成,请放心食用~
	另附此次项目的源代码:https://github.com/The-Third-Float/GBA/tree/master/HelloWorld

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播放器(它的声音处理方面能力也不错哦),做成随身电影播放齐,做成电子词典等,只要你有能力设计它的软件

2.GBA程序开发准备

GBA开发所需要的东西除了一台可以用的电脑外,主要就是一个编译器和一个GBA模拟器

GBA程序开发可以用汇编语言和C/C++语言来写程序,不过汇编语言比较复杂,而且不是我们平常使用8086汇编,而是Arm汇编。任天堂公司可能觉得C++程序运行消耗太大,不推荐C++语言来开发,所以我们都一直将C语言作为首选

2.1 GBA编译器 - Arm Gcc || ArmSDT

GBA开发所用的C语言编译器主要有两种:一种是免费的gcc,一种是Arm公司提供的ArmSDT

这里的gcc不是简单的linux下的gcc,而是Arm Gcc。简单地说就是把我们平时常见的gcc改造成生成ARM CPU代码的gcc;ArmSDT是Arm公司提供的专门为ARM CPU的开发程序的C语言编译器,它的编译速度和质量上都比免费的gcc要高,但对C语言的支持不及gcc好(gcc毕竟已经成了C语言编译器的标准),最关键的问题它不是免费的,但是它的免费测试版还是可以用的

Arm Gcc:这里提供三种方法来配置编译环境

  • 我们可以在linux下自己去配置Arm Gcc,相关教程:https://blog.csdn.net/xiaohua0877/article/details/78615897
  • 我们也可以从cygwin(在windows下模拟UNIX的工具)中得到在windows下运行的gcc.你可以根据这个cygwin下的gcc,自己去配置Arm Gcc
  • 也可以直接去下载个配置好了的Arm Gcc。比如DevKitAdv,DevKitAdv大概10多MB。有了它,你用不着去找什么cygwin(200-300MB)和配置什么Arm Gcc了,DevKitAdv已经帮你做好了一切,你只需安装它就OK了。DevkitAdv的下载地址: https://sourceforge.net/projects/devkitadv/files/

ArmSDT:你可以到Arm公司的网站去下载ARMSDT2.51. http://www.arm.com

2.1.1 GBA开发包 - DevKitAdv

DevKitAdv 主要包括两部分:一是GCC++编译器,二是 GBA库

GCC++编译器功能和我们常用的VC差不多,只不过少了个编辑源代码的文本编辑器,还有就是不支持类(class),只能用struct来替代。它的作用是把我们写的代码编译成二进制的可执行文件,当然这个可执行文件是相对GBA和GBA模拟器而言的。就象Windows里的EXE文件无法在Mac机上使用是一样的道理;

GBA库提供了图像,控制及声音一系列的函数,和GCC++配合使用。

下载并安装DevKitAdv开发包到C:\devkitadv-r5-beta-3目录(注:若目录位置不是这个的话还需要设置环境变量
需要注意的是在 https://sourceforge.net/projects/devkitadv/files/Windows/Release 5 (Beta 3)/ 地址中有许多文件,我一开始也不知道下载那个,实际上是每个版块都有各自的功能,建议把全部的文件都下载下来,然后依次解压到C盘中:
在这里插入图片描述
在这里插入图片描述
解压完毕后即可测试程序是否可以正常执行,进入该目录运行DevKit-Advance-R5-Beta-3.lnk文件,此时会出现蓝色的console控制台窗口,在窗口中输入命令:

cd  testsuite
make

在这里插入图片描述
之后就开始编译testsuite项目并生成agbmain.bin、agbmain.elf等文件,此时就可以先使用模拟器VisualBoyAdvance(下文有下载地址)运行其中一个文件,效果如下:
在这里插入图片描述
以上程序按Enter键(即GBA模拟器里的START键)可以重复那个刷代码的动画。至此,编译环境配置成功!


2.2 GBA模拟器 - VisualBoyAdvance

这个模拟器目前还有很多地方都可以下载,推荐两个下载地址:

  • 30
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
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. --------------------------------------------------------- */

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值