GBC游戏掌机(一)
最近在学习GBC(or CGB),闲着没事,翻译了一下一个英文的文档。暂时是初稿,也还没有翻译完。不一定会修改,也不一定会翻译完。英文原文可以在这里找到 http://verhoeven272.nl/fruttenboel/Gameboy/GBmain.html
前言
下面所述的是关于一种被叫做gameboy的手持游戏机的内部工作机制的介绍,该游戏机是由任天堂公司设计和制造的。这些介绍帮助用户了解他们的gameboy是如何“滴答”运行的。Gameboy属任天堂公司版权所有。所有对具有版权的材料的引用只为教育和学习之用,不以赢利为目的。
Game Boy 技术参数
CPU - 8位(与Z80处理器相似)
主频 - 4.194304MHz (
工作内存 8 KB ( CGB是32KB)
视频内存 8 KB ( CGB是16KB)
屏幕尺寸 2.6寸
分辨率 160×144 (20×18块图案)
最大精灵数 每屏最多16个,每行最多10个
精灵尺寸 8×8或8×16
调色板
颜色 4个灰度层(CGB是32768种颜色)
水平同步 9198 KHz (9420 KHz for SGB)
垂直同步 59.73 Hz (61.17 Hz for SGB)
声音 4声道立体音
电源 直流6V 0.7W
内存分配图
Gameboy有16位的地址总线,用于寻址ROM, RAM和I/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)芯片使用状况的信息,ROM和RAM的尺寸等等。其中的大多数字节都必需正确的设置。请参阅卡带头这一节以了解更详细的信息。
外部的内存和硬件
0000-7FFF和A000-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的操作(Bit7从1到0)只能在垂直消隐(V-Blank)期间进行,如果在这之外操作,有可能对硬件造成破坏。这个问题似乎比较严重,据说任天堂拒绝任何不遵守此条规则的游戏。
当LY的值大于或等于144时意味着垂直消隐期间。当LCD显示被禁止的时候,屏幕是空白的(白色),VRAM和OAM在这时都可以自由的存取。
--对于不同的gameboy类型,LCDC.0有不同的含义--
LCDC.0 – 1) 单色的gameboy和SGB:背景显示
当Bit0被清除时,背景变成空白(白色)。窗口和精灵仍然可以显示(如果Bit1和/或Bit5允许的话)。
LCDC.0 – 2) CGB 在CGB状态:背景和窗口优先级控制
当Bit0被清除时,背景和窗口丢失了它们的优先级,精灵将总是显示在背景和窗口之上,而不受OAM和背景属性图的优先标志位的影响。
LCDC.0 – 3) CGB 在非CGB状态:背景和窗口显示控制
当Bit0被清除时,背景和窗口都变成空白(白色)。在该情况下,窗口显示控制位(bit 5)被忽略。只有精灵可以在这种情况下显示(如果Bit1置1)。
这可能造成一个兼容性问题-任何禁止背景显示,但又希望显示窗口的单色游戏(如果有的话),在CGB上将不会正常运行。
(未完,待续)
转载于:https://my.oschina.net/tofro/blog/1503150
GBC游戏掌机(一)相关推荐
- GBC游戏掌机(二)
接上 LCD状态寄存器 FF41 – STAT – LCDC 状态 (R/W) Bit 6 - LYC=LY Coincidence Interrupt (1=Enable) (Read/W ...
- EL之GB(GBC):利用GB对多分类问题进行建模(分层抽样+调1参)并评估
EL之GB(GBC):利用GB对多分类问题进行建模(分层抽样+调1参)并评估 目录 输出结果 设计思路 核心代码 输出结果 T1. T2. 设计思路 核心代码 #T1. nEst = 500 dept ...
- EL之GB(GBC):利用GB对二分类问题进行建模并评估
EL之GB(GBC):利用GB对二分类问题进行建模并评估 目录 输出结果 T1.纯GB算法 T2.以RF为基学习器的GB算法 设计思路 核心代码 输出结果 T1.纯GB算法 T2.以RF为基学习器的G ...
- Java GridBagConstraints的帮助类:GBC
一些API: int gridx, gridy:指定单元格的起始行和列.默认值为 0. int gridwidth, gridheight:指定单元格的行和列的范围.默认值为 1. double we ...
- 驱动精灵2007_畅玩Steam的Win10游戏掌机发布! |莱莎2新战斗动画,肉腿致命驱动~...
点击蓝字 关注我们 01 <察言观色3>确认制作!今冬登陆NS 今日(11月9日),G-MODE宣布:情景模拟<察言观色>系列新作<察言观色3>已经确认制作,预计将 ...
- 牧场物语gb模拟器JAVA_3DS GBC模拟器+GB/GBC游戏合集下载
游戏介绍: GBC模拟器可以玩gb和gbc上的经典作品,也是针对于gb和gbc游戏而开发的一款模拟器,今天不仅仅跟玩家分享关于3DS GBC模拟器还上传了一些GB/GBC游戏合集,希望能够让玩家更加的 ...
- GBC代理“花生漫画PEANUTS”,遭遇侵权账户冻结应该怎么处理?
近日,有不少卖家反应自己跨境电商平台账户被冻结,资金无法提现.纠其原因为某一款产品在美国侵权被"PEANUTS WORLDWIDE LLC "起诉,导致账户冻结. 添加图片注释 ...
- ESP32搞的NES游戏掌机
本文转自立创开源硬件平台 作者:micespring 原文链接:https://oshwhub.com/micespring/esp32-nesemu ▌简介 一个基于ESP32制作的开源游戏掌机,可 ...
- java玩gbc,GB也有相当严谨的格斗游戏。GBC少年街霸2.让我稍微惊喜了一下。
本帖最后由 天山小仙 于 2014-4-10 15:49 编辑 今天玩模拟器发现了GBC的街霸ZERO2 让我惊喜的是这货相比GBC上其他格斗游戏都要严谨的多 而且移植度也相比拳皇侍魂要好上不少 本游 ...
最新文章
- Python包管理工具Distribute的安装
- java连接pda_程序文件直接拷贝到pda设备 (USB连接pc pda wince6.0 C#)
- cornerstone 忽略不必要文件
- React(0.13) 定义一个动态的组件
- Cpp 对象模型探索 / 带有虚继承类的构造函数的调用顺序
- jvm虚拟机_JVM虚拟机五连问,能过并不是只靠运气
- 简单的数据结构题(多项式、拉格朗日插值、线段树)
- axivion和astree_基于LabVIEW的IVI编程 IVI Programme Based on LabVIEW.pdf
- 选择排序之python实现
- 计算机一级有几套试卷,计算机一级B十五套试卷
- 数据加载中...请稍后(js一句代码)
- 混沌神经网络的实际应用,进化算法优化神经网络
- Navicat在输入da..时自动关闭解决方法(手心输入法)
- 致敬平凡程序员妙优车助力1024程序员节
- 流程图,梳理基本流和备选流,编写测试用例
- Java 依据文件名后缀,获取Content-Type/Mime类型
- 讲了这么多年的CPU频率,到底是什么?
- alpha和color key
- 利用花生壳来调试4G网络模块
- 噪声系数测试之Y因子(二)