GBC游戏掌机(一)

最近在学习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上将不会正常运行。

(未完,待续)

转载于:https://my.oschina.net/tofro/blog/1503150

你可能感兴趣的:(GBC游戏掌机(一))