2003-11-13

开发日记

前两天,看到253874有人说,如果在GBA上面能够移植大航海时代多好啊!我突然觉得这是一个很好的主意,但是移植对我来说比较困难,因为我对反汇编基本上一窍不通。于是我考虑在GBA上面做一个类似大航海的游戏。

其实我从2002年6月就开始做GBA开发了,那时候其实很顺利,我看GBA的官方文档看得也很舒服。但是当时工作很忙,加上我的开发进度上面遇到了一个问题,所以一直搁置,到现在已经一年多了。

当时我遇到的问题是汉字的显示问题,其实这对我来说不应该是一个问题的,作为一个从DOS时代走来的程序员,提取字模显示汉字都是司空见惯的小CASE。然而2002的我却不知道为什么在GBA上面一直也没有成功。于是前天开始我继续研究字模显示的问题,没有结果,昨天没有结果。但是我发现了一个很怪异的事情,就是当我把汉字函数写出来,我的程序的英文输出就也不正常了,这怎么可能呢?这两个明明是两个函数,而且之间没有任何的公用的全局变量。我百思不得其解。唯一的办法就是隔离错误,最终我发现,只要我的字模库文件一被包含程序的运行结果就会异常,但是完全可以编译得过去。真的很奇怪。难道这个文件很大么?不是啊!我的另一个程序里面的一张图片的库文件有40M还是很正常啊!难道是库文件的生成出了问题?于是我检查我自己写的库文件生成器,没有任何问题啊!

于是,我现在开始对比我的字模库文件和用别的工具生成的图片库文件,有什么区别么?嗯,发现了,我的库文件数据是用10进制的整数,人家的库文件数据是16进制的整数。好,我改,可是,改成了16进制,错误还是依然。

难道我的思路出了问题????可是我以前在DOS写过这样的程序何止一个?为什么都可以呢?而且我的英文字模的显示为什么没有问题呢?

最后,我发现了问题,原来我的库文件里面包含数据的数组没有声明成常量。这个字库大概有200多K,而GBA的内存是非常小的,这个数组耗尽了内存,所以程序无法正常运行。const就少写了这5个字,,,,,,

我改了3天,换了三次编译器,代码从头写了不知道多少遍,,,,,,,,,,,,,


丢人,,,,,,,,,,

这就是基础知识不扎实,编程习惯不好的下场,以前在PC开发程序,有一些内存的浪费没有任何问题,但是在GBA这类嵌入开发的时侯需要很仔细的节约每一个字节的内存,,,,,我以后会注意的。