收藏 分享(赏)

任天堂掌机GBA编程说明.doc

上传人:weiwoduzun 文档编号:4335118 上传时间:2018-12-24 格式:DOC 页数:60 大小:4.77MB
下载 相关 举报
任天堂掌机GBA编程说明.doc_第1页
第1页 / 共60页
任天堂掌机GBA编程说明.doc_第2页
第2页 / 共60页
任天堂掌机GBA编程说明.doc_第3页
第3页 / 共60页
任天堂掌机GBA编程说明.doc_第4页
第4页 / 共60页
任天堂掌机GBA编程说明.doc_第5页
第5页 / 共60页
点击查看更多>>
资源描述

1、GBA 编程手册(翻译中)1.02 版本GBA 编程手册(翻译中) 1.02 版本 11 GBA 系统 .51.1 系统概述 52 系统配置 62.1 CPU 框图 .62.2 完全框图 .72.3 内存设置和访问宽度 .82.4 高位在前 .83 GBA 内存 .93.1 内存映射图 .93.2 内存配置 .103.2.1 GBA 内部内存 .103.2.2 游戏卡内存 103.3 游戏卡内存等待控制 .123.3.1 访问时序 143.3.2 游戏卡总线 154 LCD 液晶屏 .164.1 LCD 状态 .174.1.1 垂直计数器 174.1.2 LCD 一般状态 .185 图像系统

2、195.1 背景模式 .215.1.1 背景模式的细节 215.1.2 VRAM 内存映射 226 渲染功能 236.1 字符模式背景(背景模式 0-2) 236.1.1 背景控制 236.1.2 马赛克大小 296.1.3 背景数据在 VRAM 的地址映射 306.1.4 字符数据格式 326.1.5 背景屏幕数据格式 346.1.6 背景屏幕数据在 LCD 上的地址映射 366.1.7 背景旋转和缩放特性 416.1.8 背景的滚动 446.2 位图模式背景(模式 3 到 5) 456.2.1 背景控制 456.2.2 背景旋转和缩放 466.2.3 点阵数据 466.2.4 点阵数据在

3、LCD 上的地址映射 476.3 OBJ 精灵 .506.3.1 OBJ 功能 506.3.2 字符数据映射 516.3.3 OAM .536.3.4 精灵旋转/缩放特性 596.4 对象和背景的优先级 .611 GBA 系统1.1 系统概述GBA 是一种对 GameBoy(GBC) 向下兼容的高性能的掌上游戏设备。GBA 拥有一个 2.9 英寸的 TFT 彩色液晶屏幕和 32 位的 RISC 类型 CPU,游戏性能上超过了超级任天堂(SFC)。GBA CPU 32 位 RISC 类型 CPU (ARM7TDMI) / 16.78 MHZ向下兼容 GBC 的能力 为了兼容整合了一个 8 位的

4、CISC 类型 CPU(不过,这个 CPU 不能和 GBA 的 CPU 同时工作)内存 系统 ROM 16K 字节(包含 2K 字节的 GBC 系统 ROM)工作 RAM 32K 字节+CPU 外部 256K 字节(两个时钟周期)VRAM 96K 字节OAM 64 位*128调色板 RAM 16 位*512(OBJ 256 色,BG 256 色)游戏卡 ROM 最大 32MB:掩膜 ROM 或者 Flash ROM游戏卡 RAM 最大 32MB:SRAM 或者 Flash ROM显示 240*160*RGB可同时显示 32768 色特殊效果(旋转/缩放, 混合,淡入淡出,马赛克)4 个图像模式

5、操作 操作键(A,B,L,R,START,SELECT 和 4 个方向键)声音 4 个声道(相当于 GBC 的声道)+2 个 CPU 直接控制声道(PCM 格式)通讯 串行通讯(8 位/32 位,UART,多人游戏,多用,游戏手柄总线)游戏卡 和 DMG、GBC 一样,GBA 装备了 32 针的游戏卡连接槽。当游戏卡插入的时候,GBA 自动判断类型,并自动切换 GBC 和 GBA 模式。下面的游戏卡可以在 GBA 系统上面使用。1、 DMG 游戏卡,DMG/GBC 双模式卡,GBC 专用卡2、GBA 专用卡2 系统配置2.1 CPU 框图2.2 完全框图2.3 内存设置和访问宽度当操作游戏卡的

6、程序使用 16 位指令(16 位编译器) ,操作 CPU 内部工作内存的程序使用32 位指令(32 位编译器) ,能得到更高的执行效率。2.4 高位在前In the AGB CPU, memory addresses are allocated in 8-bit increments, and little-endianformat is used in implementing the 8-, 16-, and 32-bit access widths.3 GBA 内存3.1 内存映射图下面是 GBA 系统整个的内存映射图。3.2 内存配置内存地址的 00000000h-07FFFFFFh

7、区域被分配为 GBA 内部内存,08000000h-0EFFFFFFh被分配为游戏卡内存。3.2.1 GBA 内部内存1)系统 ROM从 00000000h 开始的 16K 字节是系统 ROM。不同类型的系统调用使用这段 ROM。2)CPU 外部工作内存从 02000000h 开始的 256K 字节是 CPU 外部工作内存。这段内存是两个内存周期访问一次的,16 位总线宽度。3)CPU 内部工作内存从 03000000h 开始的 32K 字节是 CPU 内部工作内存。这段内存用来保存程序和数据。4)I/O 和寄存器这个区域是给寄存器使用的。5)调色板内存从 05000000h 开始的 1K 字

8、节是调色板内存。这段内存用来保存调色板。6)VRAM从 06000000h 开始的 96K 字节是 VRAM。这段内存用来保存背景和精灵数据。7)OAM从 07000000h 开始的 32K 字节是精灵属性内存( OAM) ,保存要显示的精灵和他们的属性。3.2.2 游戏卡内存1)游戏卡 ROM从 08000000h 开始分配了 3 个 32 兆的游戏卡 ROM 空间。这个三个空间可以设置不同的访问速度。因此,他们被命名为“等待栈 0”, “等待栈 1”,“等待栈 2”。这样的设置可以更有效率的访问游戏卡内的不同访问速度的内存。等待栈 0 的基地址是 08000000h,等待栈 1 的基地址是

9、 0A000000h,而等待栈 2 的基地址是 0C000000h。另外,每个空间最顶端的 1M 位(注意不是字节)都是分配给 Flash 内存的。这个区域主要用来保存存盘数据。2)游戏卡 RAM从 0E000000h 开始的区域是游戏卡内存区域。这个区域可以放置最大 512K 位(注意不是字节)的 SRAM 或者 Flash 内存。然而这个区域的数据宽度是 8 位的总线。由于这个设定,任何连接在这个区域的游戏卡设备必须用任天堂的库来访问。3.3 游戏卡内存等待控制32M 字节的游戏卡内存已经被映射在从 08000000h 开始的区域,然而从 0A000000h 和0C000000h 开始的两

10、个 32M 区域也是从 08000000h 开始的区域的映像。这些映像使内存可以使用一致的游戏卡访问速度(1-4 个等待时钟周期) 。d15 游戏卡类型标志系统 ROM 使用这个标志。d14 预读缓冲标志当预读缓冲标志为 1 而且预读缓冲有剩余空间的时候,预读缓冲就可以在 CPU 不使用游戏卡总线的时候控制游戏卡总线,重复的读取游戏卡 ROM 的数据。当 CPU 打算读取游戏卡上面的指令,如果击中预读缓冲,那么 CPU 可以完全不需要等待就取得指令。如果预读缓冲没有击中,那么 CPU 就从游戏卡 ROM 取指令,那么等待时间取决于设定好的等待时间。当预读缓冲标志为 0,那么 CPU 总是从游戏

11、卡内存取指令,等待时间取决于设定好的等待时间。d12-11 PHI 中断输出控制控制 PHI 中断是否输出,可以一直设定为 00(没有输出) 。d10-08,d07-d05,d04-02 等待栈等待时间控制这三个区域可以分别设定等待时间(CPU 时钟周期数) 。CPU 时钟周期数和等待时间控制的设定之间的关系如下。使用和你的设备恰当的设定。系统 ROM 运行以后(用户程序开始时) ,等待控制的值是 000。如果游戏卡里面的 MASK ROM 的规格是(第一次访问/3 个周期) , (第二次访问/1 个周期) 。那么,需要把等待控制设定为 101。d01-00 游戏卡 RAM 等待时间控制游戏卡

12、 RAM 内存的访问等待 CPU 时钟周期数也可以设定。下面是等待时间控制的设定和时钟周期数的关系。使用和你的设备恰当的设定。3.3.1 访问时序下面的时序图,先是如何访问游戏卡 ROM,ROM 规格是第一次访问/三个周期,第二次访问/一个周期的。1)连续访问2)随机访问3.3.2 游戏卡总线游戏卡总线包括 32 个接口,如下表。4 LCD 液晶屏GBA 使用 2.9 英寸宽的反射型 TFT 真彩 LCD(液晶)屏幕。GBA 的垂直刷新空白间隔比 DMG 和 GBC 的都大,而它的水平刷新空白间隔是固定的。4.1 LCD 状态4.1.1 垂直计数器VOUNT 寄存器可以被读取,以得到当前是正在

13、渲染 LCD228 行中的哪一行。数值范围为 0-227。数值为 0-159 表明正在渲染,数值为 160-227 表明正在处于垂直刷新空白间隔。4.1.2 LCD 一般状态从 DISPSTAT 寄存器的 0 到 5 位可以读取 LCD 的状态信息。另外,LCD 控制器可以产生三种中断请求。d15-08 垂直计数器设定设定垂直计数器比对和垂直计数器符合中断使用的值。范围是 0-227。d05 垂直计数器符合中断允许标志允许在当前渲染行数(VCOUNT 寄存器值)等于设定值的时候,生成一个中断请求。d04 H-Blank(水平空白)中断允许标志允许在水平空白时,生成一个中断请求。d03 V-Bl

14、ank(垂直空白)中断允许标志允许在垂直空白时,生成一个中断请求。d02 垂直计数器比对这个标志表明垂直计数器设定值和垂直计数器寄存器值是否相等。如果相等则标志值为1,如果不相等值为 0。d01 H-Blank 状态检查是否处于水平空白间隔。d00 V-Blank 状态检查是否处于垂直空白间隔。5 图像系统根据软件的需要,GBA 可以使用不同的图像系统。显示相关的项目主要是在 DISPCNT 寄存器设置。d15 精灵窗口显示标志控制精灵窗口是否显示的主要标志。关于精灵窗口的信息,参看“6.3 OBJ 精灵”d14d13 窗口 0,1 的显示标志。控制窗口 0,1 是否显示的主要标志。关于窗口的

15、信息,参看“8 窗口特性”d12-08 屏幕显示标志允许分别控制 BG0,BG1,BG2,BG3 和 OBJ(精灵)是否显示。d07 强制空白设定此位可以引起 CPU 强行停止图形处理循环程序,这样 CPU 可以访问 VRAM,调色板内存,OAM 和内部寄存器。在强制空白期间,LCD 显示一个白屏。然而,内部水平垂直扫描计数器在强制空白期间仍会继续工作。当内部水平垂直扫描计数器在显示期间取消强制空白的时候,显示会将在三根垂直线以后从头开始, 。d06 精灵字符映射格式设定 VRAM 里精灵字符的映射模式设置为 0 代表精灵字符在内存中是二维映射的。设置为 1 代表精灵字符在内存中是一维映射的。

16、关于精灵字符映射格式的信息,参看 “6.3.2 字符数据映射”d05 H-Blank(水平空白)间隔精灵处理标志设定为 0,允许在水平扫描间隔(包括水平空白间隔)进行精灵处理。设定为 1,只允许在显示间隔而不允许在水平扫描间隔进行精灵处理。因此,当用户需要在 H-Blank 间隔期间访问 OAM 或者精灵 VRAM 内存的时候,应该设定 1。然而,在这种情况下,最大精灵显示数是无法达到的。d04 显示当前帧选择当渲染带有两个帧的位图模式(背景模式 4,5)背景时,这位用来选择要渲染的帧。设定为 0 则选择第 0 帧,设定为 1 则选择第一帧。d03 GBC 模式GBA 装有两个 CPU。在 G

17、BA 模式下使用 32 位的 RISC 类型 CPU,在 GBC 模式下使用 8位的 CISC 模式 CPU。由于这位是系统控制的,所以用户不能访问这位。d02-00背景模式选择背景模式 0-5。关于背景模式的信息,请看下面的章节。5.1 背景模式5.1.1 背景模式的细节在 GBA 中,根据需要可以选择字符背景模式和位图背景模式。背景模式 0,1,2 下 LCD 屏幕的渲染是通过字符模式背景实现的。背景模式 3,4,5 下 LCD 屏幕的渲染是通过位图模式背景实现的。注意模式 3,只有一个帧的内存,可以显示 32768 色,适合用来显示静止图像。模式 4,5 有两个帧的内存,使用用来渲染动画

18、。字符背景的滚动方法和背景的旋转/缩放和位图背景的滚动的方法有所不同。 (参看“6.1.8 背景滚动”和 “6.1.7 背景旋转和缩放特性” )5.1.2 VRAM 内存映射VRAM 的 96K 字节内存在不同背景模式下的映射方式如下图。在模式 0,1 和 2 下用户可以把屏幕数据和字符数据区域映射在 64K 自己的背景区域里。更多的信息,参看“6.1.3 背景数据在 VRAM 的地址映射” 。另外,关于内存区域和每个区域数据格式的更多描述,请看后面的章节。6 渲染功能GBA 的 CPU 有 96K 字节大小的内建 VRAM。它的渲染功能包括了背景和精灵的显示能力。不同背景模式有着不同的渲染方

19、法,请看下面的描述。6.1 字符模式背景(背景模式 0-2)在字符模式下,背景屏幕的组成时 8*8 点阵的基本字符。6.1.1 背景控制GBA 系统共有四个背景控制寄存器,对应于背景屏幕数量的最大值(寄存器BG0CNT,BG1CNT,BG2CNT 和 BG3CNT) 。BG0CNT 和 BG1CNT 是专用于字符背景输出控制的,而 BG2CNT 和 BG3CNT 也可以用于旋转缩放背景的控制。背景模式使用的寄存器如下。背景控制寄存器的内容如下。1) 输出背景控制(背景 0,背景 1)2)输出背景和背景旋转缩放控制(背景 2,背景 3)这些寄存器既可以是字符背景的控制,也可以是旋转缩放背景的控制

20、。BG*CNT d15-14 屏幕大小允许设定背景的屏幕大小。当设定值大于最大值的时候,剩余的 VRAM 可以用来保存字符数据。请参照下表和上面 VRAM 映射图。1)字符背景窗口大小概述2)旋转缩放背景的屏幕大小的图解BG2CNT,BG3CNT d13 区域越界处理由于旋转缩放操作,显示屏幕可能会超越虚拟屏幕的边界,这个位设定用来选择,超出范围的区域是变成透明还是回绕。关于缩放的信息,参看“6.1.7 背景旋转和缩放特性”BG*CNT d12-08 屏幕起始块设定设定 VRAM 里存储屏幕数据的起始内存块。 (32 步:0-31,步长是 2K 字节)参看 “6.1.3 背景数据在 VRAM

21、的地址映射”BG*CNT d07 颜色模式指定背景字符数据的颜色模式是 16 色/16 个调色板,还是 256 色/1 个调色板。BG*CNT d06 马赛克打开或关闭背景的马赛克选项。BG*CNT d03-02 字符起始块设定设定 VRAM 里存储字符数据的起始内存块。 (4 步:0-3,步长是 16K 字节)参看 “6.1.3 背景数据在 VRAM 的地址映射”BG*CNT d01-00 背景间优先级在缺省值下(所有的背景相同优先级) ,优先级顺序是背景 0,背景 1,背景 2 和背景 3。然而,这个顺序可以任意改变。可以制定 0(最高优先级)到 3 的数值。背景优先级变化时,一定要小心使

22、用点的颜色特殊效果。6.1.2 马赛克大小马赛克的大小在 MOSAIC 寄存器设定。打开关闭背景的马赛克需要设定相关背景控制寄存器的马赛克标志。马赛克相关的信息,参看上一个章节,背景控制。马赛克值制定多少个一般的点组成一个马赛克里的大点。每个马赛克块的左上角的颜色就是整个马赛克快的颜色。具体参看以下的表格。如果马赛克大小为 0,那么即使马赛克功能打开,那么也是正常的显示。6.1.3 背景数据在 VRAM 的地址映射背景数据(背景字节和背景数据)保存在 VRAM 里 64K 字节的背景区域。1)背景字符数据背景字符数据的起点地址可以在 BG 控制寄存器字符起始块设定中指定。存储的字符数据的总量取决于数据格式(颜色格式:256 色/一个调色板或 16 色/16 个调色板) 。2)背景屏幕数据背景屏幕数据的起点地址可以在 BG 控制寄存器屏幕数据起始块设定中指定。存储的字符数据的总量取决于背景屏幕类型(字符背景和旋转缩放背景)和大小。这些可以通过背景控制寄存器设定。背景数据起始块图解

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 说明文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报