用C在GBA上写光线追踪(0)配置开发编译环境

前段时间用C#写了一个光线追踪程序,可以渲染圆球,平面这种基本图形,反射,光照,阴影,都大致尝试做了一下。

↑ C#实现的光线追踪

   

↑ GBA上C实现的光线追踪

然而,在我打算继续深入优化的时候,我失去了我的好帮手强强电脑,换成了超极本。看来继续做技术密集型光线追踪是不行的了。就在这时,我看到了一些GBA的开发文章,我又刚好有一台GBA,于是我产生了一个大胆的想法——在GBA上实现光线追踪。GBA架构清晰简明,入手门槛低,而且还有一个官方的编程指南,很适合我这种人折腾。

旧版GBA

在写程序之前,我要先花点时间了解GBA。GBA(Game Boy Advance)是任天堂2001年的推出的彩色游戏掌机,它的前身是黑白掌机GB。

GBA有一个16位色深,240x160的液晶屏幕,初代无背光。

它有一个频率为16.78Mhz的32位RISC类型的CPU(ARM7TDMI)。虽然和现在的几GHz的处理器比起来实在太低,但只要使用得当,还是可以做出很多东西的。

除此之外,它机身的内存有两部分,一个是32KB的内部工作内存,还有一个256KB的外部工作内存。这两个内存都是掉电数据就没了的ROM。插入机身的游戏卡容量最大32M,游戏卡大部分内存是只读的,但一部分可擦写储存游戏存档。

详细的功能和GBA的运行原理我就先不讲了,我们从最迫切的配置开发和编译的环境开始,之后再慢慢介绍功能。


本来我想直接从写代码开始讲的,但是现在网络上GBA的中文资料很少,而GBA简单的硬件又很适合学习系统底层和嵌入式开发,所以我还是详细的讲述我了解到的所有知识,希望能吸引更多人了解并入门GBA编程。

更好的教程:TONC教程:建立开发环境

开发前的准备

Windows系统的电脑,因为我只有这个。

GBA主要使用C语言,虽然也许能找到C++编译到GBA的编译器,但GBA上运行的是裸机代码,C速度快,也适合和底层交互。因此要想玩好GBA,要熟悉C语言,了解系统底层原理,不过即使不太会也没关系,我也不会,用着用着 踩多几个坑就熟悉了。

为了方便测试,当然要有一个GBA的模拟器,这样就不用每次都把程序放到真机上运行了。我推荐mGBA,这是一个新开发(2013年)的模拟器,开发它的人希望兼顾准确性和速度。它不仅可以显示地图,精灵,调色板,还可以使用GDB调试(虽然我还不会)

如果你想在真机上运行,可以采用两种方法。1、使用flash烧录卡,将程序写入到烧录卡里就可以插入到GBA上运行。但烧录卡一般比较贵,即使是GBA完全不流行的现在也要150~1000元。2、使用multiboot线,直接把程序送到机子256kB的内存里,不用插卡就能运行。这其实是利用了GBA多人连线游戏的功能,这个功能可以让一台机子通过连接线把小游戏发给其他机子,这样大家就可以一起玩小游戏了。我们通过把电脑假装成一台主机,就可以实现传输自己的程序。这种特制线一般买不到,需要的话可以自制,不太难成本也低。

要用什么编译器?

对于这种嵌入式的开发,最重要的是要有一套工具链。工具链是指编译器、连接器、解释器和调试器这些组成的一套工具,它可以把我们的代码编译成在特定机器上运行的机器代码。不同的机器的工具链一般不通用,例如ARM公司就提供了它自己的产品的工具链。

ARM的官方编译器

GBA用的就是ARM的CPU,因此可以从ARM那里找到工具链,但是时代久远,有点难找,而且可能是收费的。

gcc编译器

除此之外我们可以使用gcc的编译器,gcc是免费开源的编译器,是开源计划里的重要组成部分,这个东西大概程序员都知道,程序员们希望世界上所有程序都是开源的,可以自由修改,于是他们一起做了一个开源的编译器(gcc),然后通过编译器做了开源的系统(linux),然后在系统上写了开源的软件。一般的gcc是编译到linux的,但也有编译到ARM的gcc-arm。我们只需要针对GBA配置一个就可以了,当然我不会,不过一些GBA爱好者已经为我们做好了。

DevKitAdv:这个比较旧,需要使用.bat脚本管理编译。

devkitPro:整合了多个游戏机的工具链,支持GBA,NDS,PSP,NS等,可以按需下载,有这个新的就没必要用旧的了。这个工具内有一些makefile模板,可以使用makefile方便的管理要编译的内容,输入make就可以编译,很有了解的必要。

这些工具链中也提供了用于GBA的库libgba,包含了常用类型和数学运算库,内存操作,中断系统等一些常用的功能。

安装工具链

我这里介绍devkit Pro的安装:

去论坛里下载devkit Pro的Windows安装包,名称是devkitProUpdater,选择安装位置(建议C盘根目录),点选需要的组件(GBA),之后就会开始联网下载。

选择devkitPro组件

安装之后打开安装目录,看看包含什么:

devkitARM:这就是工具链

examples:示例文件,里面有图像、音频演示,xboo连接线项目,还有一个空的项目模板。

libgba: devkitPro的GBA库;

libtonc:tonc教程的作者写的GBA库。

tools:一些小工具,例如修复rom头部,图像转换。

sys2等一些安装文件。

测试工具链

现在来测试能不能正常使用工具链。

打开examples->gba->graphics->SimpleBGScroll,在这里打开cmd(shift+右键菜单)(win10下是powershell)

在cmd下输入 make ,看看有没有编译出一个build文件夹和.gba的rom文件。

成功编译的输出

如果成功了,恭喜你,可以开始写代码了!

错误的解决方法

如果有错误,我这里列出了2种可能的原因:

1、cmd/PowerShell的目录地址不在 \divkitPro\examples\gba\graphics\SimpleBGScroll。

2、make指令是调用工具链里make.exe,如果没有添加Path,系统会找不到这个程序。

打开环境变量的窗口,检查是否已经配置了变量。正常情况下,应该有四个:1) 在Path里的“c:\devkitPro\msys2\usr\bin”,2) 名称为DEVKITARM的“/opt/devkitpro/devkitARM”,3) 名称为DEVKITPPC的“/opt/devkitpro/devkitPPC” ,4) 名称为DEVKITPRO的“/opt/devkitpro”。

如果检查无误还是不行,可以试试卸载重装orz

配置开发环境

我也不知道怎么配置一个既可以一键编译,又可以进行调试的开发环境。我只能介绍一下我摸索出来的勉强能用的方法。

我使用的是VisualStudio 2019,好像很多人觉得vs不适合嵌入式和Linux开发,但我vs用惯了,能不换就不换。vs2017后加入了Linux的开发组件,我觉得还是很好用的。如果你使用的不是vs,可以直接看文章末尾的TONC教程和附录里的其他方法。

首先我们需要安装VS2019的c/c++开发组件,还有Linux开发组件(为了可以建立makefile项目)

安装完成之后启动vs,新建一个makefile项目(翻译为生成文件项目)。

之后我们需要在项目属性的NMake里设置include文件的位置和make等命令。

包含搜索路径 设置为 /divkitPro/libgba/include和/libtonc/include的地址。

生成命令行 输入 make

最后一步,我们到devkitPro的examples里把示例文件的makefile复制到我们的项目根目录下。

生成

如果源文件里已经有main.c了,现在按生成->生成*你的项目名称* 或者Ctrl + B 应该就可以编译代码生成.gba文件了。

新建源文件

之后如果我们要新建一个源文件,在解决方案资源管理器的源文件里新建项,名称为xxx.c ,后缀为c,目录为项目里的/source

新建头文件

解决方案资源管理器的头文件里新建项,选择.h文件,并新建一个include文件夹。如果新建了include文件夹,要记得把这个文件夹地址加入项目的包含搜索路径。此外我们还要修改添加makefile里的include路径,不然编译器不知道。

由于makefile已经写好了模板,所以我们只需要在INCLUDES := 后面写include,他就会自动识别为项目目录/include。如果项目目录里有多个include文件夹,可以在include后加空格,再写名称。

makefile模板里有3处include地址:

1、我们写的 INCLUDES := xxx ,是项目目录里的。

2、devkitPro自带的两个库里的include

3、项目编译后产生的Build目录



到这里应该已经介绍完配置环境的问题了,之后要学的就是如何编程使用GBA上的硬件。在下一篇文章之前,我先推荐一些对学习GBA编程很有帮助的内容。

开发资料推荐

GBA编程手册。这个好像是官方的手册,中文版翻译到第六章就没了。里面说明了GBA的硬件和功能,相当于GBA的说明书,应该是最有用的资料。

GBA教程TONC。非常全面,很有深度,但有些地方难度也比较大。这个教程也讲了如何配置环境,包括visual c++ 和 NP2编辑器的配置。此外还讲了makefile的原理和编写方法。(可惜中国打不开)

GBA开发网站。存了很多开发的软件和资料,还有别人做好的游戏。



下一篇文章我会再讲讲GBA的硬件和基本运行原理,之后就开始写光线追踪程序。

如果有机会我会再写一篇文章讲讲如何调试GBA程序。



附录

Eclipse+devkitPor搭个GBA开发环境

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

原文地址:https://www.cnblogs.com/h5l0/p/11602879.html

时间: 2024-11-21 02:55:52

用C在GBA上写光线追踪(0)配置开发编译环境的相关文章

一、【用django2.0来开发】 环境部署和初始化项目

一.[用django2.0来开发] 环境部署和初始化项目 发现网上没有什么比较好的django系列的教程, 所以打算写一整套教程来教会大家如何使用django2.0 整个教程都会围绕一个开发一个项目来完成, 这一篇主要就是讲清楚整个环境以及初始化下项目, 以及一些开发中常见的操作项目地址:https://gitee.com/ccnv07/django_example 项目介绍 大概就是使用python开发一个cms系统, 和大家知道的dede,phpcms有些类似, 可以注册.登录.有会员系统.

WebStorm 8.0安装LESS编译环境的教程

WebStorm是一个非常棒的Web前端开发编辑器,被程序猿们成为“最智能的JavaScript IDE”.对HTML5.Bootstrap框架.Node.js等都有完美支持.目前最新版本为WebStorm 8.0.x.下面就介绍一下如何在WebStorm 8.0安装LESS编译环境. 1.首先安装WebStorm 8.0 在官方下载并安装WebStorm 8.0.x,具体步骤就不说了,没什么特别之处. 2.安装NodeJs NodeJs官方版本有32位和64位,可以根据实际需要进行选择安装.

在cocos code ide的基础上构建自己的lua开发调试环境

现在无论是端游还是手游(基于cocos2d)的开发, 基本模式都是c++内核 + lua逻辑的路线.对于c++的开发和调试, vs已经能很好的满足开发者的需求, 微软这方面真是值得称颂.不幸的是, lua的开发和调试,还没有一个统一的,方便的开发调试环境,这也给广大的luaer和项目造成了极大的困扰.目前通常的做法大致有如下几种: 1.纯粹意义上的lua编辑器, 如Sublime Text 2 + 插件的模式,解决了代码提示和补齐问题. 2.编辑器的基础上加入调试功能, 通常是直接在vs上开发一

在Windows*上极速飞艇平台定制开发编译Tensorflow教程

最简单极速飞艇平台定制开发[大神源码论坛]dsluntan.com [布丁源码论坛]budingbbs.com 企娥3393756370的 Tensorflow 的安装方法是在 pip 一键式安装官方预编译好的包 pip install tensorflow 通常这种预编译的包的编译参数选择是为了最大兼容性而不是为了最优性能,导致在使用过程中,每次运行代码都会输出一大堆的 warning 信息.例如在安装了谷歌官方的 Tensorflow 1.3.0 包后,运行以下测试代码时 import te

VC++6.0 配置CppUTest测试环境

最近看<软件项目成功之道>,书中无数次提及到“单元测试”对于项目成败的重要性,看到同事将CppUTest用于Linux动态库测试,于是在VC++6.0环境下搭建一个基于CppUTest的单元测试环境,用于测试工作中编写的C函数.下面就来介绍整个搭建过程,整个过程分为四步:前期准备——需要的库:环境配置——VC++6.0配置:实例演示——可复现的Demo:拓展——后续学习资料. 一.前期准备: CppUTest下载 官网:http://cpputest.github.io/ 历史版本:https

真正实现再wine上安装VC6.0,并编译调试程序

在wine上装VC6的想法以前用虚拟机玩Linux时就有,知道这两个月因为某原因在实体机上装Linux才正式努力的实现. 直接安装问题太多,就算时用最新的Crossover试用版装也有ACCMP错误之类. 网上的资料也少的可怜, 有个自称装上的, 帖子连接 ,也没写具体步骤.按着wineHQ那文章的说法,先设为win98,再安装然后安装再设回xp的方法,IDE可以运行,但是调用cl,link有问题,无法变异代码. 网上还有个讲WIndows和Linux交叉编译的,提到这个问题,也只是说拷贝文件,

搭建Hadoop2.6.0+Eclipse开发调试环境

上一篇在win7虚拟机下搭建了hadoop2.6.0伪分布式环境.为了开发调试方便,本文介绍在eclipse下搭建开发环境,连接和提交任务到hadoop集群. 1. 环境 Eclipse版本Luna 4.4.1 安装插件hadoop-eclipse-plugin-2.6.0.jar,下载后放到eclipse/plugins目录即可. 2. 配置插件 2.1 配置hadoop主目录 解压缩hadoop-2.6.0.tar.gz到C:\Downloads\hadoop-2.6.0,在eclipse的

CAS 4.0 配置开发手冊

1    下载 地址http://downloads.jasig.org/ cas-server-4.0.0-release.tar.gz cas-client-3.3.3-release.tar.gz 2    配置 解压cas-server-4.0.0.将当中module/cas-server-webapp-4.0.0.war拷贝到Tomcat的webapps文件夹下,重命名为cas.war.启动Tomcat解开压缩. 2.1 CAS的HTTP模式与HTTPS设置 1)cas\WEB-INF

CAS 4.0 配置开发手册

1    下载 地址http://downloads.jasig.org/ cas-server-4.0.0-release.tar.gz cas-client-3.3.3-release.tar.gz 2    配置 解压cas-server-4.0.0,将其中module/cas-server-webapp-4.0.0.war复制到Tomcat的webapps目录下,重命名为cas.war,启动Tomcat解开压缩. 2.1 CAS的HTTP模式与HTTPS设置 1)cas\WEB-INF\