• GBA平台ARM学习手记 第一天

    2009-02-22

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/liuyanghejerry-logs/35530565.html

    GBA平台ARM学习手记


    在学懂了脚本之后,开始钻研如何让口袋ROM做一些原本做不成的事,比如黄版的跟随皮卡丘、赠送定制能力的PM等,于是心里痒痒的开始学ARM了...
    先发一下牢骚吧- -

    国内的GBA ARM教程实在是太少了,只有几个GBA汉化组放出过基于ROM破解所写的简易教程,这些教程水平参差不齐,甚至连一些基本的概念都解释不清.更麻烦的是其完整程度和精细程度都不怎么样,大多属于"头大无尾"的作品,例程更是稀少...
    有些嵌入式ARM程序企业也有教程,但却又不是0起步,基本都是辅助资料,而且因为不是针对GBA的,我甚至搞不清究竟哪些才配合GBA...
    外国的GBA ARM教程稍好些,但是也缺乏相对完整的,而且因为是外文的,读起来并不流畅...

    当然...也不可能什么都准备的那么充分,饭不能让别人喂着吃嘛.

    于是呢,我打算把我学习的历程做成一个手记,一来便于自己来复习,二来也算是填补一下国内和PM改版界的空白吧,希望对大家也有帮助.

    注:因为我有一些浅薄的VB+PHP+Delphi+C++基础,平时也比较乐于涉猎电脑的相关知识,所以整个过程会比较跳跃.

     

    第一天

    1.GBA使用ARM处理器,这种处理器的汇编理论和Intel不同,所以汇编语言也不同,Win32的汇编教程也就不能作为参考了.

    2.常用的GBA汇编编译器是Goldroad.

    3.汇编给我的感觉就是在CPU上运算,然后把结果放在寄存器里.

    4.寄存器类似于高级语言中的变量,储存用.

    5.GBA所提供的寄存器共16个,分别是:r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15.

    6.在这些寄存器中,r0—r12可以归我们调用,r13和堆栈制度有关,r14用于存放子程序的返回地址,r15是程序计数器和标志寄存的地方.

    7.ARM汇编语言以符号";"为注释符号,作用域只有一行.

    8.符号"@"后面的语句类似于Delphi中的声明部分.

    9.一个非命令的纯英数字符串可以作为标签,相当于一个高级语言中的一个模块或者一个过程.

    10.ARM汇编语言的基本样式:

                @include screen.h
                @textarea

                ldr r1,=REG_DISPCNT

                ldr r2,=(BG2_ENABLE|MODE_3)

                str r2,[r1]

                ldr r1,=0x0FF

                ldr r2,=vram+2410

                str r1,[r2]

                label1

                B label1

                @pool
                @endarea
               
    命令大多为3个字符,每条一行.

    11.Goldroad允许我们使用数据包含的功能,类似于C中的#include,但这些数据不是汇编语言,不能被执行.

    分享到: