任天堂掌机GBA编程说明(精选.)

  • 格式:doc
  • 大小:4.76 MB
  • 文档页数:60

GBA编程手册(翻译中)1.02版本GBA编程手册(翻译中) 1.02版本 (1)1 GBA系统 (4)1.1系统概述 (4)2 系统配置 (5)2.1 CPU框图 (5)2.2 完全框图 (6)2.3 内存设置和访问宽度 (7)2.4 高位在前 (7)3 GBA内存 (8)3.1 内存映射图 (8)3.2 内存配置 (9)3.2.1 GBA内部内存 (9)3.2.2 游戏卡内存 (9)3.3 游戏卡内存等待控制 (11)3.3.1 访问时序 (13)3.3.2 游戏卡总线 (14)4 LCD 液晶屏 (15)4.1 LCD状态 (16)4.1.1 垂直计数器 (16)4.1.2 LCD一般状态 (17)5 图像系统 (18)5.1 背景模式 (20)5.1.1 背景模式的细节 (20)5.1.2 VRAM内存映射 (21)6 渲染功能 (22)6.1 字符模式背景(背景模式0-2) (22)6.1.1 背景控制 (22)6.1.2 马赛克大小 (28)6.1.3 背景数据在VRAM的地址映射 (29)6.1.4 字符数据格式 (31)6.1.5 背景屏幕数据格式 (33)6.1.6 背景屏幕数据在LCD上的地址映射 (35)6.1.7 背景旋转和缩放特性 (40)6.1.8 背景的滚动 (43)6.2 位图模式背景(模式3到5) (44)6.2.1 背景控制 (44)6.2.2 背景旋转和缩放 (45)6.2.3 点阵数据 (45)6.2.4 点阵数据在LCD上的地址映射 (46)6.3 OBJ精灵 (49)6.3.1 OBJ功能 (49)6.3.2 字符数据映射 (50)6.3.3 OAM (52)6.3.4 精灵旋转/缩放特性 (58)6.4 对象和背景的优先级 (60)1 GBA系统1.1系统概述GBA是一种对GameBoy(GBC) 向下兼容的高性能的掌上游戏设备。

GBA拥有一个2.9英寸的TFT彩色液晶屏幕和32位的RISC类型CPU,游戏性能上超过了超级任天堂(SFC)。

GBA CPU32位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, andlittle-endianformat 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。