为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

GBA开发手册

2009-03-27 50页 doc 4MB 162阅读

用户头像

is_351067

暂无简介

举报
GBA开发手册GBA官方编程手册(翻译中……….) GBA编程手册(翻译中) 1.02版本 微尘程序员网站 Tinyfool 未经Tinyfool书面授权,不得用于任何商业用途 本译文由微尘程序员网站-Tinyfool翻译,版权所有,未经Tinyfool(郝培强)书面授权,不得用于任何商业用途。任何转载不得删除相关版权信息。本文的原文版权归任天堂公司所有。 1GBA编程手册(翻译中) 1.02版本 51 GBA系统 51.1系统概述 62 系统配置 62.1 CPU框图 72.2 完全框图 82.3 ...
GBA开发手册
GBA官方编程手册(翻译中……….) GBA编程手册(翻译中) 1.02版本 微尘程序员网站 Tinyfool 未经Tinyfool书面授权,不得用于任何商业用途 本译文由微尘程序员网站-Tinyfool翻译,版权所有,未经Tinyfool(郝培强)书面授权,不得用于任何商业用途。任何转载不得删除相关版权信息。本文的原文版权归任天堂公司所有。 1GBA编程手册(翻译中) 1.02版本 51 GBA系统 51.1系统概述 62 系统配置 62.1 CPU框图 72.2 完全框图 82.3 内存设置和访问宽度 82.4 高位在前 93 GBA内存 93.1 内存映射图 103.2 内存配置 103.2.1 GBA内部内存 103.2.2 游戏卡内存 123.3 游戏卡内存等待控制 143.3.1 访问时序 153.3.2 游戏卡总线 164 LCD 液晶屏 174.1 LCD状态 174.1.1 垂直计数器 184.1.2 LCD一般状态 195 图像系统 215.1 背景模式 215.1.1 背景模式的细节 225.1.2 VRAM内存映射 236 渲染功能 236.1 字符模式背景(背景模式0-2) 236.1.1 背景控制 296.1.2 马赛克大小 306.1.3 背景数据在VRAM的地址映射 326.1.4 字符数据格式 346.1.5 背景屏幕数据格式 366.1.6 背景屏幕数据在LCD上的地址映射 416.1.7 背景旋转和缩放特性 446.1.8 背景的滚动 456.2 位图模式背景(模式3到5) 456.2.1 背景控制 466.2.2 背景旋转和缩放 466.2.3 点阵数据 476.2.4 点阵数据在LCD上的地址映射 506.3 OBJ精灵 506.3.1 OBJ功能 516.3.2 字符数据映射 536.3.3 OAM 596.3.4 精灵旋转/缩放特性 616.4 对象和背景的优先级 1 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位的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个图像模式 操作 操作键(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 内存设置和访问宽度 当操作游戏卡的程序使用16位指令(16位编译器),操作CPU内部工作内存的程序使用32位指令(32位编译器),能得到更高的执行效率。 2.4 高位在前 In the AGB CPU, memory addresses are allocated in 8-bit increments, and little-endian format is used in implementing the 8-, 16-, and 32-bit access widths. 3 GBA内存 3.1 内存映射图 下面是GBA系统整个的内存映射图。 3.2 内存配置 内存地址的00000000h-07FFFFFFh区域被分配为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字节是调色板内存。这段内存用来保存调色板。 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的基地址是0A000000h,而等待栈2的基地址是0C000000h。 另外,每个空间最顶端的1M位(注意不是字节)都是分配给Flash内存的。 这个区域主要用来保存存盘数据。 2)游戏卡RAM 从0E000000h开始的区域是游戏卡内存区域。这个区域可以放置最大512K位(注意不是字节)的SRAM或者Flash内存。然而这个区域的数据宽度是8位的总线。由于这个设定,任何连接在这个区域的游戏卡设备必须用任天堂的库来访问。 3.3 游戏卡内存等待控制 32M字节的游戏卡内存已经被映射在从08000000h开始的区域,然而从0A000000h和0C000000h开始的两个32M区域也是从08000000h开始的区域的映像。 这些映像使内存可以使用一致的游戏卡访问速度(1-4个等待时钟周期)。 [d15] 游戏卡类型标志 系统ROM使用这个标志。 [d14] 预读缓冲标志 当预读缓冲标志为1而且预读缓冲有剩余空间的时候,预读缓冲就可以在CPU不使用游戏卡总线的时候控制游戏卡总线,重复的读取游戏卡ROM的数据。当CPU打算读取游戏卡上面的指令,如果击中预读缓冲,那么CPU可以完全不需要等待就取得指令。如果预读缓冲没有击中,那么CPU就从游戏卡ROM取指令,那么等待时间取决于设定好的等待时间。 当预读缓冲标志为0,那么CPU总是从游戏卡内存取指令,等待时间取决于设定好的等待时间。 [d12-11] PHI中断输出控制 控制PHI中断是否输出,可以一直设定为00(没有输出)。 [d10-08],[d07-d05],[d04-02] 等待栈等待时间控制 这三个区域可以分别设定等待时间(CPU时钟周期数)。CPU时钟周期数和等待时间控制的设定之间的关系如下。使用和你的设备恰当的设定。 系统ROM运行以后(用户程序开始时),等待控制的值是000。如果游戏卡里面的MASK ROM的规格是(第一次访问/3个周期),(第二次访问/1个周期)。那么,需要把等待控制设定为101。 [d01-00] 游戏卡RAM等待时间控制 游戏卡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寄存器可以被读取,以得到当前是正在渲染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-Blank(垂直空白)中断允许标志 允许在垂直空白时,生成一个中断请求。 [d02] 垂直计数器比对 这个标志表明垂直计数器设定值和垂直计数器寄存器值是否相等。如果相等则标志值为1,如果不相等值为0。 [d01] H-Blank 状态 检查是否处于水平空白间隔。 [d00] V-Blank 状态 检查是否处于垂直空白间隔。 5 图像系统 根据软件的需要,GBA可以使用不同的图像系统。显示相关的项目主要是在DISPCNT寄存器设置。 [d15] 精灵窗口显示标志 控制精灵窗口是否显示的主要标志。 关于精灵窗口的信息,参看“6.3 OBJ精灵” [d14][d13] 窗口0,1的显示标志。 控制窗口0,1是否显示的主要标志。 关于窗口的信息,参看“8 窗口特性” [d12-08] 屏幕显示标志 允许分别控制 BG0,BG1,BG2,BG3和OBJ(精灵)是否显示。 [d07] 强制空白 设定此位可以引起CPU强行停止图形处理循环程序,这样CPU可以访问VRAM,调色板内存,OAM和内部寄存器。在强制空白期间,LCD显示一个白屏。然而,内部水平垂直扫描计数器在强制空白期间仍会继续工作。当内部水平垂直扫描计数器在显示期间取消强制空白的时候,显示会将在三根垂直线以后从头开始,。 [d06] 精灵字符映射格式 设定VRAM里精灵字符的映射模式 设置为0代表精灵字符在内存中是二维映射的。设置为1代表精灵字符在内存中是一维映射的。 关于精灵字符映射格式的信息,参看 “6.3.2 字符数据映射” [d05] H-Blank(水平空白)间隔精灵处理标志 设定为0,允许在水平扫描间隔(包括水平空白间隔)进行精灵处理。 设定为1,只允许在显示间隔而不允许在水平扫描间隔进行精灵处理。因此,当用户需要在H-Blank间隔期间访问OAM或者精灵VRAM内存的时候,应该设定1。然而,在这种情况下,最大精灵显示数是无法达到的。 [d04] 显示当前帧选择 当渲染带有两个帧的位图模式(背景模式4,5)背景时,这位用来选择要渲染的帧。设定为0则选择第0帧,设定为1则选择第一帧。 [d03] GBC模式 GBA装有两个CPU。在GBA模式下使用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有两个帧的内存,使用用来渲染动画。 字符背景的滚动方法和背景的旋转/缩放和位图背景的滚动的方法有所不同。(参看“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。 它的渲染功能包括了背景和精灵的显示能力。不同背景模式有着不同的渲染方法,请看下面的描述。 6.1 字符模式背景(背景模式0-2) 在字符模式下,背景屏幕的组成时8*8点阵的基本字符。 6.1.1 背景控制 GBA系统共有四个背景控制寄存器,对应于背景屏幕数量的最大值(寄存器BG0CNT,BG1CNT,BG2CNT和BG3CNT)。 BG0CNT和BG1CNT是专用于字符背景输出控制的,而BG2CNT和BG3CNT也可以用于旋转缩放背景的控制。 背景模式使用的寄存器如下。 背景控制寄存器的内容如下。 1) 输出背景控制(背景0,背景1) 2)输出背景和背景旋转缩放控制(背景2,背景3) 这些寄存器既可以是字符背景的控制,也可以是旋转缩放背景的控制。 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的地址映射” 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的数值。 背景优先级变化时,一定要小心使用点的颜色特殊效果。 6.1.2 马赛克大小 马赛克的大小在MOSAIC寄存器设定。 打开关闭背景的马赛克需要设定相关背景控制寄存器的马赛克标志。 马赛克相关的信息,参看上一个章节,背景控制。 马赛克值制定多少个一般的点组成一个马赛克里的大点。 每个马赛克块的左上角的颜色就是整个马赛克快的颜色。具体参看以下的。 如果马赛克大小为0,那么即使马赛克功能打开,那么也是正常的显示。 6.1.3 背景数据在VRAM的地址映射 背景数据(背景字节和背景数据)保存在VRAM里64K字节的背景区域。 1)背景字符数据 背景字符数据的起点地址可以在BG控制寄存器字符起始块设定中指定。 存储的字符数据的总量取决于数据格式(颜色格式:256色/一个调色板或16色/16个调色板)。 2)背景屏幕数据 背景屏幕数据的起点地址可以在BG控制寄存器屏幕数据起始块设定中指定。 存储的字符数据的总量取决于背景屏幕类型(字符背景和旋转缩放背景)和大小。这些可以通过背景控制寄存器设定。 背景数据起始块图解 6.1.4 字符数据格式 字符数据有两种格式,16色/16个调色板的,和256色/1个调色板的。精灵和背景使用的字符都是相同的格式。 具体格式如下面的图表。 1)16色/16个调色板 每个地址保存两个点。因此每个基本字符的总数据量是20H*8位。 2)256色/一个调色板 每个地址保存一个点。因此每个基本字符的总数据量是40H*8位。 6.1.5 背景屏幕数据格式 背景屏幕可以看作是8*8的基本字符单元组成的,而背景屏幕数据就是说明这些字符如何排列的数据。 背景屏幕数据应该在保存在以背景控制寄存器中背景数据起始块部分指定的地址为起点的内存区域里。背景数据条目的数量由背景控制寄存器里的屏幕大小部分的设定决定。 字符背景的屏幕数据和旋转缩放背景的屏幕数据的格式在下面说明。 1)字符背景 字符背景的每个基本字符包括两个字节,可以设定1024个基本字符。 [d15-12] 调色板 如果背景控制器的颜色模式设定为16色/16个调色板模式时,这些位用来设定该字符使用(0-15)哪一个调色板。 如果颜色模式为256色/一个调色板,那么这个设定是无效的。 [d11] 垂直翻转标志 设定背景字符的垂直翻转。 设定为1,显示的时候背景字符进行垂直翻转。 [d10] 水平翻转标志 设定背景字符的水平翻转。 设定为1,显示的时候背景字符进行水平翻转。 [d09-00] 字符名 指定字符的号码,号码的计算从背景控制寄存器的字符起始地址块设定的地址为起点。 2) 旋转/缩放背景屏幕 旋转/缩放背景屏幕每个基本字符占一个字节,可以设定256个字符。 字符数据必须设定为256色/一个调色板的模式。 对于旋转/缩放背景屏幕,背景控制寄存器的颜色模式设定无效。 [VRAM注意事项] GBA在VRAM的背景区域的使用上提供了非常高的自由度。 因此,在VRAM的管理上,需要注意下面的要点。 1. 背景字符数据有两种格式(16色和256色),而且它们可以一起使用。 2. 背景字符数据起始块可以从4个块中选择(背景控制寄存器)。 3. 背景屏幕数据起始块可以从32个块中选择(背景控制寄存器)。 4. 每个背景都可以设定不同的屏幕尺寸。 5. 字符背景和旋转缩放背景在可以在一个屏幕上一起显示。 在管理VRAM的时候,背景模式1尤其值得注意,因为背景模式1下,字符背景和旋转背景可能会一起使用。 因此,编程时,需要对VRAM的地址映射状态有充分的理解。 6.1.6 背景屏幕数据在LCD上的地址映射 1) 字符背景 1-1)虚拟屏幕尺寸为256*256 1-2)虚拟屏幕尺寸为512*256 1-3)虚拟屏幕尺寸为256*512 1-4)虚拟屏幕尺寸为512*512 2)旋转缩放背景 2-1) 虚拟屏幕大小为128*128 2-2)虚拟屏幕大小为 256*256 2-3) 虚拟屏幕大小为512*512 2-4)虚拟屏幕大小为1024*1204 6.1.7 背景旋转和缩放特性 背景的旋转缩放可以在整个背景屏幕的旋转下实现。 旋转的背景数据可以参看下面的图表。 GBA的旋转缩放是由下面的公式实现的。 模式2,3的旋转和缩放操作的参数在下面的寄存器中指定。背景数据的起点寄存器也用来实现旋转缩放屏幕和位图屏幕的滚动。 背景数据的起点设定的寄存器 背景数据的方向参数的寄存器 背景旋转缩放处理的操作 1. 首先用户设定屏幕左上角旋转/缩放操作以后的结果,然后把这个值设定为引用背景数据的起点,设定在 BG2X_L,BG2X_H,BG2Y_L,BG2Y_H,BG3X_L,BG3X_H,BG3Y_L,BG3Y_H等寄存器。这个值设定为有符号的定点实数(8位作为小数部分,19位作为整数部分,1位作为符号位,总共是28位)。 引用背景数据方向在BG2PA,BG2PB,BG2PC,BG2PD,BG3PA,BG3PB,BG3PC,BG3PD等寄存器设定。这个值也是定点实数(8位作为小数部分,7位作为整数部分,1位作为符号位,总共是16位)。 2. 图形处理程序计算前面设定的引用背景数据起点相关的X轴向的增量(dx,dy)的和,计算出X轴坐标。 3. 当处理到下一条线的时候,计算Y轴向的增量(dmx,dmy)的和,然后进行第二步的处理。 4. 然而,如果在H-Blanking间隔期间改写背景数据引用的起始地点,那么Y方向的和就不会被计算。CPU通过这个模式来改变每条线的中心坐标和旋转缩放参数。 显示区域越界处理 当显示屏幕由于旋转缩放操作超出了虚拟屏幕的边界,那么可以在背景控制寄存器里设定,发行越界的时候是超出部分是透明还是回绕。 关于背景控制的信息,参看“6.1.1 背景控制” 6.1.8 背景的滚动 对于每个字符背景屏幕,可以以点为单位设定偏移量。偏移量寄存器仅用于字符背景。为了在旋转/缩放背景和位图模式背景里面使用偏移显示功能,需要设定引用背景的起点。参看“6.1.7 背景旋转和缩放特性”。 偏移量设定寄存器 6.2 位图模式背景(模式3到5) 在位图模式下,背景屏幕的组成部分是以点为单位控制的,VRAM(帧缓存)的内容显示出来也就是屏幕上面点的颜色。 6.2.1 背景控制 位图背景将被看作BG2。因此,为了在LCD上显示帧缓存中的内容,你需要在DISPCNT寄存器设定BG2显示标志为ON。为了控制背景需要使用BG2CNT寄存器。 BG2CNT [d06] 马赛克 这个位控制BG2的马赛克处理是否打开。打开的时候,还需要设定马赛克大小寄存器。关于马赛克的信息,参看“6.1.2 马赛克的大小”。 BG2CNT [d01-00] 背景的优先级 由于实际上位图模式只有一个背景平面(除了backdrop平面),所以没有所谓的背景间的优先级,但是你可以设定背景和精灵间的优先级。参见“精灵和背景的优先级”。 6.2.2 背景旋转和缩放 位图的旋转和缩放主要使用BG2相关寄存器(BG2X_L, BG2X_H, BG2Y_L, BG2Y_H, BG2PA, BG2PB,BG2PC, and BG2PD)。 关于旋转缩放参数,参看“6.1.7背景旋转缩放特性” 对于位图背景,如果显示部分由于旋转缩放超过了屏幕边缘,那么这些区域会变成透明的。 6.2.3 点阵数据 在位图模式下,只有显示屏幕尺寸的点阵数据才能保存在VRAM里。GBA提供的位图模式可以显示连续色调的32768色(背景模式3和5)和32768色中的256色(背景模式4)。不同模式在帧缓冲中保存的数据有不同的格式,将在下面描述。 1. 32768色连续色调显示格式(背景模式3和5) 调色板内存无效。 每个点使用半个字(译注:ARM7的字长是32位,半字为16位)。 2. 256色显示格式(背景模式4) 需要调色板。 每个点用一个字节。 6.2.4 点阵数据在LCD上的地址映射 下面可以看到,不同的背景模式有着不同的地址映射。 帧缓冲(VRAM)的起始地址为06000000h。 6.2.4.1 背景模式3(32768色,240*160点,一个帧缓冲) 因为这个模式只有一个帧缓冲,所以这个模式主要用来显示静态图片。然而,它可以显示全屏的连续色调的32768色。 6.2.4.2 背景模式4(256色,240*160点,两个帧缓冲) 这个模式在VRAM里面分配了两个帧缓存,所以这个模式适于播放全动态的视频。从32768色里,有256色可以连续色调的全屏显示。 1) 帧缓存0 2) 帧缓存1 6.2.4.3 背景模式5(32768色,160*128点,两个帧缓冲) 虽然这个模式有两个帧缓冲,可以显示32768色,但是这个模式的显示区域不是全屏。 1) 帧缓冲0 2) 帧缓冲1 6.3 OBJ精灵 6.3.1 OBJ功能 不管任何背景模式,精灵都是字符模式的。但是不同的背景模式决定了基本字符的数目。 项目 功能 颜色数 16色/16个调色板 256色/一个调色板 (可以混合显示) 精灵数 模式0-2: 1024(16色/16个调色板) 512(256色/一个调色板) 模式3-5: 512(16色/16个调色板) 256(256色/一个调色板) 字符大小 8*8-64*64(12种类型) 同屏最大数目 128(64*64) 同线最大数目 128(8*8) 特殊效果 垂直水平翻转,半透明,马赛克,优先级,精灵窗口 同一扫描线的精灵显示能力 单线精灵显示能力是保证最大效率的能力,具体数值在下面的表格体现。 当显示的精灵从OAM的第一个开始连续排列的时候,你可以用下面的公式计算同一扫描线可以显示的精灵: (水平点数*4-6)/渲染循环数=单线精灵数(最大128) 水平点数一般来说是308,但是如果DISPCNT寄存器的H-Blank间隔精灵处理标志设为1,水平点数就是240。 “*4”表示每一个点精灵渲染程序可以循环的次数。“-6”表明在横向扫描线开始的时候,精灵渲染需要处理的循环次数。 “渲染循环数”和单线最大精灵数在下面的表格体现。 精灵水平尺寸 渲染循环数 单线精灵数 一般精灵 旋转缩放精灵 一般精灵 旋转缩放精灵 8 8 26 128 47 16 16 42 76 29 32 32 74 38 16 64 64 138 19 8 128(两个64) X X 4 如果OAM中无法显示的精灵(在屏幕之外的)数量比可以显示精灵少,那么不能显示的精灵的尺寸越大,渲染的效率也就越低。请注意这个问题。 6.3.2 字符数据映射 对于精灵字符数据,基本上字符是8*8的点阵,8*8字符到64*64字符都可以使用(一共12种)。.精灵字符的基础地址是固定的VRAM基础地址。精灵字符数据可以分配32K或者16K字节主要取决于背景模式(参看5.1.2 “VARM内存映射”)。 字符数据的映射有两种类型,在DISPCNT寄存器的第6位设定。 精灵的管理是用字符名进行的,字符名就是从精灵字符数据库起始地址开始的,以32字节为单位的地址。16色/16个调色板模式下的精灵字符需要32个字节。256色/1个调色板模式下的精灵字符需要64个字节。 1) 精灵字符在VRAM的二维映射 把DISPCNT的第6位设为0,那么精灵字符的映射模式是二维的,如下图。 [请注意字符名] 当256色/一个调色板的字符在二位映射模式下显示时,字符名被限定必须是偶数(参见OAM的OBJ属性2)。因此,大多数情况下定义了256色/一个调色板的字符的二维映射模式时,字符名都是偶数。 2) 精灵字符在VRAM的一维映射 把DISPCNT的第6位设为1,那么精灵字符的映射模式是一维的,如下图。 字符包含的数据会保存在连续的地址里面。 6.3.3 OAM 精灵的显示是通过把数据放置到OAM实现的。 最多128个精灵的数据可以写到CPU内部的OAM(地址为07000000h-070003FFh),而且128也是LCD能显示的最多精灵数。 OAM映射 在OAM精灵属性可以占用48位*128个精灵的空间。 另外,如果对精灵进行旋转缩放操作,那么还有32个实例的旋转缩放参数组合(PA,PB,PC和PD)需要写入OAM,如下图。 精灵属性0 [d15-14] 精灵形状 选择精灵字符形状:正方形,水平长方形,垂直长方形。 11是禁止使用的值。 请参照精灵参数1的精灵大小设定。 [d13] 颜色模式标志 指定对象数据是16色/16个调色板模式还是256色/1个调色版。 [d12] 精灵马赛克标志 打开关闭精灵的马赛克效果。 [d11-10] 精灵模式 指定精灵是一般精灵还是半透明精灵。 一般的精灵设定为00,半透明精灵设定为01,精灵窗口设定为10。 11是禁止使用的值,所以请注意不要设定为11。 当精灵被设定为半透明精灵,可以就已进行颜色特殊效果的处理。关于颜色特殊效果的信息,参看“9颜色特殊效果” [d09] 旋转/缩放的双倍大小标志 精灵大小是受到精灵区域限定条件(8*8-64*64)限定的,当旋转精灵的时候字符数据可能会超越这个界限。 这个问题可以通过设定双倍大小标志来避免。 使用这个设定以后,只要精灵大小没有超过两倍,就不会超过范围。 例子:在旋转的时候,64*64点的精灵区域变成128*128点精灵区域。注意,精灵的显示位置改变了。 当双倍大小标志设定为0的时候,超出边缘的部分会被切除。 请看下图。 [d08] 旋转/缩放标志 打开或关闭精灵的旋转处理。 一旦精灵的旋转缩放标志设定为1,那么每扫描线最大精灵数会减少。请参照“6.3.1 每扫描线精灵显示能力”。 [d07-00] Y轴坐标 设定精灵在屏幕位置上的Y轴坐标。 [注意] Y轴上,屏幕内有160个点(0-159),96个(160-255)屏外点(虚拟屏幕)。 当垂直尺寸为64点的精灵,使用双倍大小字符时,尺寸为128点,也就超过了96点的虚拟屏幕。 因此,在Y轴的129-159范围内,精灵的低端超过了整个屏幕(正常屏幕+虚拟屏幕)从屏幕上面显示出来了。那么精灵大部分在正常屏幕下部的部门也不会显示。 精灵属性1 [d15-14] 精灵大小 这两个位和精灵属性0的精灵形状标志一起决定精灵的大小。对于每种精灵形状,一共有四中大小。 [d13][12] 垂直和水平翻转标志 设定这两个位可以进行精灵的垂直水平翻转。 正常显示设定为0,翻转显示设定为1。 当旋转缩放标志(精灵属性0的[d08])设定为1,那么这些位就成为旋转缩放参数的部分的高位。 [d13-09]旋转缩放参数部分 这些参数用于旋转缩放处理。 The parameters used in OBJ rotation/scaling processing are selected from the 32 parameters registered in OAM. [d08-00] X轴坐标 设定对象显示的X轴坐标,从0到511。 精灵属性2 [d15-12] 调色板号 当使用16色/16个调色板格式时,这些位用来指定1到16个调色板。 当使用256色/一个调色板格式时,这些位没有任何用处。 [d11-10] 与背景相关的优先级 指定精灵和背景相关的优先级。关于优先级的信息,参看“6.4 精灵和背景的显示优先级”。 [d09-00] 字符名 设定精灵在VRAM里的首地址(参看“6.3.2 字符数据映射”)。 16色/16个调色板模式(颜色模式=1) 允许选择最多1024个字符。 256色/1个调色板模式(颜色模式=0) 允许选择最多512个字符。 在二维映射模式下位0固定为0。 背景模式为3~5(位图背景模式) 在位图背景模式下,精灵字符数据内存只剩下16K字节,所以字符名0-511不能使用,只能使用512以上的值。 6.3.4 精灵旋转/缩放特性 精灵的旋转和缩放特性和背景的旋转和缩放基本上是一样的。 精灵字符数据引用的旋转 当精灵被显示的时候,精灵的数据就会被水平的引用,从左上角开始。旋转显示可以通过给引用加一个角度实现。精灵的旋转中心固定的是精灵显示区域的中心。如果引用点超过了精灵的大小,就会变成透明。 精灵旋转缩放处理的操作 1. 在OAM的精灵属性1设定旋转缩放参数。 2. 图形处理程序计算相对于旋转中心的X轴向增量(dx,dy)的和,作为引用点,计算X轴象坐标。 3. 计算下一条线的时候,计算相对于旋转中心的Y轴向增量(dmx,dmy)的和,用来计算下一条线的坐标,然后,进行上面的第二条。 旋转缩放参数 设定旋转缩放处理中的引用字符数据的方向。 PA,PB,PC,PD的值是有符号的,定点实数(8位作为小数部分,7位作为整数部分,1位作为符号位,总共16位)。 下面的4个参数作为一组一起使用,可以被放置在OAM的任意32个区域里。 6.4 对象和背景的优先级 1) 背景间的优先级 背景间的优先级可以被设定为4级。 当背景的优先级相同时,背景号越小的得到优先级越高。 2) 精灵间的优先级 精灵间的优先级可以被设定为4级。 当精灵的优先级相同时,精灵号越小的得到优先级越高。 3) 背景和精灵间的优先级 每个精灵相对于背景的优先级可以设定为4级。请参看下面的图示。 [使用优先级的注意事项] 如果精灵数目顺序和精灵的优先级颠倒,精灵间的背景显示会出现错误。请注意不要让这样的情况发生。 下面的例子显示时是不正确的: 精灵编号0(精灵优先级为2) 背景(背景优先级为1) 精灵编号1(精灵优先级为0) _1131008876.doc
/
本文档为【GBA开发手册】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索