文档章节

GBC游戏掌机(一)

来来叔叔
 来来叔叔
发布于 2017/08/04 23:58
字数 1315
阅读 11
收藏 0
 

最近在学习GBC(or CGB),闲着没事,翻译了一下一个英文的文档。暂时是初稿,也还没有翻译完。不一定会修改,也不一定会翻译完。英文原文可以在这里找到 http://verhoeven272.nl/fruttenboel/Gameboy/GBmain.html

前言

下面所述的是关于一种被叫做gameboy的手持游戏机的内部工作机制的介绍,该游戏机是由任天堂公司设计和制造的。这些介绍帮助用户了解他们的gameboy是如何“滴答”运行的。Gameboy属任天堂公司版权所有。所有对具有版权的材料的引用只为教育和学习之用,不以赢利为目的。

Game Boy 技术参数

CPU               - 8位(与Z80处理器相似)

主频              - 4.194304MHz (

工作内存       8 KB ( CGB32KB)

视频内存       8 KB ( CGB16KB)

屏幕尺寸       2.6

分辨率           160×144 (20×18块图案)

最大精灵数    每屏最多16个,每行最多10

精灵尺寸       8×88×16

调色板          

颜色              4个灰度层(CGB32768种颜色)

水平同步       9198 KHz (9420 KHz for SGB)

垂直同步       59.73 Hz (61.17 Hz for SGB)

声音              4声道立体音

电源              直流6V 0.7W

内存分配图

Gameboy16位的地址总线,用于寻址ROM, RAMI/O寄存器。

基本分配图

0000-3FFF   16KB ROM Bank 00    (in cartridge, fixed at bank 00)

4000-7FFF   16KB ROM Bank 01..NN (in cartridge, switchable bank number)

8000-9FFF   8KB Video RAM (VRAM) (switchable bank 0-1 in CGB Mode)

A000-BFFF   8KB External RAM     (in cartridge, switchable bank, if any)

C000-CFFF   4KB Work RAM Bank 0 (WRAM)

D000-DFFF   4KB Work RAM Bank 1 (WRAM) (switchable bank 1-7 in CGB Mode)

E000-FDFF   Same as C000-DDFF (ECHO)    (typically not used)

FE00-FE9F   Sprite Attribute Table (OAM)

FEA0-FEFF   Not Usable

FF00-FF7F   I/O Ports

FF80-FFFE   High RAM (HRAM)

FFFF        Interrupt Enable Register

位于ROM Bank 0的跳转向量

下面的地址是用作跳转向量的:

0000,0008,0010,0018,0020,0028,0030,0038    用于RST控制

0040,0048,0050,0058,0060                  用于中断

但是,假如你的程序没有使用RST控制或中断,这些地址的内存可能用于其它用途。RST命令是一个字节长的操作码,除了目的地址是固定的外,它类似于CALL指令。

ROM Bank 0中的卡带头

0100-014F的内存是卡带的头信息。这个区域包含了程序代码,入口点,校验和,关于内存控制器(MBC)芯片使用状况的信息,ROMRAM的尺寸等等。其中的大多数字节都必需正确的设置。请参阅卡带头这一节以了解更详细的信息。

外部的内存和硬件

       0000-7FFFA000-BFFF范围的内存空间可以用于连接外部的硬件。第一个区域一般是作为ROM的地址空间,带有内存控制器的卡带也可以使用这个区域来产生数据(只写)到内存控制器芯片。第二个区域经常作为外部RAM或者其它硬件(如实时时钟等)的地址空间。外部的内存一般连接到浮冲电池,即使在游戏机关闭或者卡带被移除的情况下也能保存游戏进度和分数纪录等。请参阅内存控制器这一节以了解更详细的信息。

视频显示

LCD控制寄存器

FF40 – LCDC – LCD 控制 (R/W)

Bit 7 - LCD Display Enable                            (0=Off, 1=On)

Bit 6 - Window Tile Map Display Select          (0=9800-9BFF, 1=9C00-9FFF)

Bit 5 - Window Display Enable                       (0=Off, 1=On)

Bit 4 - BG & Window Tile Data Select                 (0=8800-97FF, 1=8000-8FFF)

Bit 3 - BG Tile Map Display Select              (0=9800-9BFF, 1=9C00-9FFF)

Bit 2 - OBJ (Sprite) Size                      (0=8x8, 1=8x16)

Bit 1 - OBJ (Sprite) Display Enable              (0=Off, 1=On)

Bit 0 - BG Display (for CGB see below)          (0=Off, 1=On)

LCDC.7 – LCD 显示使能

注意:停止LCD的操作(Bit710)只能在垂直消隐(V-Blank)期间进行,如果在这之外操作,有可能对硬件造成破坏。这个问题似乎比较严重,据说任天堂拒绝任何不遵守此条规则的游戏。

LY的值大于或等于144时意味着垂直消隐期间。当LCD显示被禁止的时候,屏幕是空白的(白色),VRAMOAM在这时都可以自由的存取。

--对于不同的gameboy类型,LCDC.0有不同的含义--

LCDC.0 – 1) 单色的gameboySGB:背景显示

Bit0被清除时,背景变成空白(白色)。窗口和精灵仍然可以显示(如果Bit1/Bit5允许的话)。

LCDC.0 – 2) CGB CGB状态:背景和窗口优先级控制

Bit0被清除时,背景和窗口丢失了它们的优先级,精灵将总是显示在背景和窗口之上,而不受OAM和背景属性图的优先标志位的影响。

LCDC.0 – 3) CGB 在非CGB状态:背景和窗口显示控制

Bit0被清除时,背景和窗口都变成空白(白色)。在该情况下,窗口显示控制位(bit 5)被忽略。只有精灵可以在这种情况下显示(如果Bit11)。

       这可能造成一个兼容性问题-任何禁止背景显示,但又希望显示窗口的单色游戏(如果有的话),在CGB上将不会正常运行。

(未完,待续)

© 著作权归作者所有

来来叔叔
粉丝 0
博文 100
码字总数 55732
作品 0
广州
高级程序员
私信 提问
PSP开发工具包--PSPSDK

PSPSDK 是 PSP 的开发工具包。 PSP全称PlayStation Portable,是一种由SONY开发的新型多功能掌机。于2004年12月12日正式发售。 它采用4.3寸16:9比例、背光全透式的夏普ASV超广可视角液晶屏幕...

匿名
2009/02/07
7K
0
狗年特别篇:卖萌的狗游戏,脑洞够大不如体验够萌

大年初一的狗年特别篇《狗年第一天,必须向20年前的经典狗狗游戏致敬》推出后,就有朋友立刻补足了遗憾。 谁说没有用狗狗做主角的大作,至少有2个: 其一是任天堂推出的掌游《任天狗》,另一...

张书乐
2018/02/23
0
0
MAME 0.203 发布,重温童年的街机模拟器

MAME 0.203 已发布,MAME 最初是街机模拟器,随着时间的推移,MAME 吸收了姊妹项目 MESS(多机种模拟器超级系统),所以 MAME 现在还记录了各种各样的(大多是老式的)电脑游戏、掌机游戏和电...

王练
2018/11/05
1K
6
MAME 0.196 发布,重温童年的街机模拟器

MAME 0.196 已发布,MAME 最初是街机模拟器,随着时间的推移,MAME 吸收了姊妹项目 MESS(多模拟器超级系统),所以 MAME 现在还记录了各种各样的(大多是老式的)电脑游戏、掌机游戏和电子游...

王练
2018/03/30
2.1K
8
MAME 0.201 发布,重温童年的街机模拟器

MAME 0.201 已发布,MAME 最初是街机模拟器,随着时间的推移,MAME 吸收了姊妹项目 MESS(多机种模拟器超级系统),所以 MAME 现在还记录了各种各样的(大多是老式的)电脑游戏、掌机游戏和电...

王练
2018/09/02
1K
5

没有更多内容

加载失败,请刷新页面

加载更多

自建redis笔记

自建redis笔记 最近在linux安装了一下redis,特做一些笔记! 本文先单节点启动redis,然后再进行持久化配置,在次基础上,再分享搭建主从模式的配置以及Sentinel 哨兵模式及集群的搭建 单节点...

北极之北
18分钟前
2
0
vue+element之多表单验证

方法一:利用promise var p1=new Promise(function(resolve, reject) { this.$refs[form1].validate((valid) => { if(valid){ ......

沉迷代码我爱学习
21分钟前
2
0
golang 1.13 errors 包 新函数介绍

引 这次 errors 包算重量级更新。很有更能把以前的一些设计模式给推到。下面聊下用法。 error 装包 以前返回一个错误,想要保存 error 链,还要定义结构体保存以前的 error 信息。感兴趣看下...

guonaihong
30分钟前
50
0
并发编程之线程池

一、线程池 1、什么是线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序 都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。 第一:降...

codeobj
32分钟前
4
0
知识点总结思维导图模板分享,良心安利,建议收藏

思维导图经常被用在学习中,对大脑思维进行发散,对知识进行记忆。使用思维导图可以让知识更加简单更有层次。下面是利用思维导图所绘制的几款知识点总结思维导图模板,大家可以进行进行参考使...

干货趣分享
35分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部