GBA编程初解.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
GBA编程初解

GBA编程初解 乐水 GBA编程初解   在具体介绍gba编程之前,我想先感谢一个人,他就是 水银 兄。在我学习的过程中水银兄给了我很多有用的宝贵资料,在此我向他表示感谢。   GBA是新一代的32位手掌机,强大的机能吸引了无数玩家和编程爱好者。现在用于开发的编译器有两种,一种是完全免费的GCC,和收费的ARM SDT,目前我在使用的是gcc,虽然网上也有D过来的arm sdt但我是无福享用的,23MB的大家伙啊,当初下载gcc这个12MB的东东时我就已经吐血了,可怜我的小猫啊。   好了,废话少说,进入正题。GBA使用的是卡带也就是只读rom为存储载体虽然容量可以很大,但问题也不少。也就是说我们不可能动态的分配使用卡上的内存了尽管它可以有128MB。当然gba也为我们提供了ram,至于容量嘛……,看下面的资料知道了。 单词含义: 1. GBA - Game Boy Advance ^_^ 2. BG(Backgroud) - 背景 3. Sprite - 精灵 4. Tile - 地图图块 5. RAM(Random Access Memory) - 随机访问存储器 接口地址 :   外部 RAM: 地址: 0大小: 256Kb 作用: 存放程序及数据   内部 RAM: 地址: 0大小: 32Kb? 作用: 我想是高速内存,和cache作用一样吧   IO RAM: 地址: 0大小: 1Kb 作用: 控制图像,声音,DMA等内存映射IO   Palette - 调色板   地址: 0大小: 0x400 bytes 作用: 存放调色板数据   VRAM(Video RAM) - 视频内存   地址: 0大小: 0x20000 bytes 作用: 位图模式下存放帧缓冲数据,图块模式下存放图块数据及图块地图数据   OAM(Object Attribute Memory) - 精灵对象属性内存   地址: 0大小: 0x400 bytes 作用: 用于控制精灵 6. ROM(Read Only Memory) - 只读存储器 地址: 0大小: 看你的游戏卡的大小罗 作用: 存放所有的程序和数据 7. ARM - 32bit 指令系统 (RISC,精简指令集) 8. Thumb - 16bit 指令系统 (具体区别详见 /files/armthumb-romram.txt) 9. DMA(Direct Memory Access) - 直接内存访问 10.DISPCNT(Display Controller) - 显示控制(内存地址)   当初看水银兄写的gba教程时一直不明白明明是256色模式,可指向VRAM的指针却是short型的。后来才知道,gba访问VRAM时一次必须读写2个字节,即16bit。我晕~~!所以我只好严格要求自己的blit函数。虽然也找到一个可以写8bit的putpixel函数代码,但速度太慢了不适合用在显示大量图片的地方。   需要注意的地方大概都说完了,我们可以进入代码部分了。   虽然是专用游戏机,但显示模式也需要设定才行。 #define REG_DISPCNT *(u16*)0/ 显示寄存器地址 #define VRAM 0// 图像缓冲区地址 #define M5_VRAM 0x0600A000 // M5缓冲区地址 #define BACKBUFFER 0x010// 双缓冲/背缓冲地址 #define PALETTE 0x5000000// 调色板地址 #define MODE_3 0x03 // 240*160 15位/单缓冲区 #define MODE_4 0x04 // 240*160 8位/双缓冲区 #define MODE_5 0x05 // 160*128 15位/双缓冲区 #define BG2_ENABLE 0x0400 // BG_2 #define SetMode(Mode) REG_DISPCNT=(Mode) // 设置显示模式的宏定义 typedef unsigned char u8; typedef unsigned short u16; typedef unsigned long u32; typedef struct BITMAP { int x,y,w,h; u16 MskCol; float bitx,bity; u8 flag; u16 *dat; }BITMAP; BITMAP screen; u16 *palette_mem

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档