NES 名词解释
本文介绍了 NES(FC、红白机、小霸王)中一些名词或者术语,主要与 PPU 有关。
Tile
8x8 像素图像。每像素 2 比特, 共 16 字节大小。每个像素可以使用 4 种颜色。
Sprite
表示屏幕上可以移动的图片。有两种大小:8x8(WxH)和 8x16(WxH)。
Pattern Table
存储 Tile 像素数据,可以把 Pattern Table 看作是切割并重新组织的图片资源。Tile 每个像素占 2 比特,像素数据按比特顺序划分为两个平面分别存储,每个平面 8 字节。每个 Tile 的 16 字节数据中,低 8 个字节为低位平面,高 8 个字节为高位平面。
一个 Pattern Table 的最大大小为 4 KB,即最多可以存储 256 个 Tile。Pattern Table 通常位于卡带中。
Name Table
Name Table 中存储的是 Tile 索引,每个 Name Table 可以包含 32x30 (WxH)个 Tile 索引,每个 Tile 索引使用 1 字节表示,共 960 字节。由于每个 Tile 为 8x8 的像素图像,因此 Name Table 可以表示一张 256x240 的图片,刚好为全屏图片的大小。
Name Table 通常位于 VRAM 中,与 Attribute Table 一起存储,主要用作背景图渲染。
参考:https://www.nesdev.org/wiki/PPU_nametables
Character Memory
用于存储 Pattern Table 的内存区,位于卡带上,映射到 PPU 地址空间 $0000 ~ $1fff 范围上。PPU 最多能够寻址 8 KB 的 Character 内存,因此 Character 内存是支持映射的。
Attribute Table
共 64 字节。Name Table 中的 Tile 按 2x2 的格子,可以分为 16x15 个块。每个块共享一个属性字节,属性占 2 比特,表示子调色板编号,属性字节中的比特分配方案如下:
+------+------+
| 0..1 | 2..3 |
+------+------+
| 4..5 | 6..7 |
+------+------+
Attribute Table 通常位于 VRAM 中,与 Name Table 一起存储,主要用作背景图渲染时选用子调色板。
参考:https://www.nesdev.org/wiki/PPU_attribute_tables
OAM
对象属性存储区,位于 PPU 内,共 256 字节,用于存储对象的属性。对象有 4 个属性字段,每个属性字段 1 字节,共可以存储 64 个对象的信息。对象属性用于控制 Sprite 渲染,每个字节意义如下:
| 字节序号 | 含义 |
|---|---|
| 0 | Y 坐标 |
| 1 | Tile 索引 |
| 2 | 属性 |
| 3 | X 坐标 |
参考:https://www.nesdev.org/wiki/PPU_OAM
WRAM
通常意义上的 RAM,位于主板上,共 2 KB,用于存储 CPU 要使用的数据。
VRAM
视频内存,位于主板上,用于存储 PPU 要使用的数据(Name Table 和 Attribute Table), 共 2 KB。VRAM 一般位于 PPU 地址空间 0x2000 ~ 0x3f00 处。
调色板
调色板一词在 NES 世界里可能有两种含义。
第一种是通常意义上的调色板,用索引表示真实的 RGB 颜色。NES 中,这种调色板共 64 色。
第二种实际上是指“调色板 RAM” - 一块位于 PPU 地址空间 0x3f00 ~ 03f1f 共 32 字节的 RAM,这块 RAM 中存储的是颜色的索引。调色板 RAM 按用途,可分为两组。一组用于背景渲染,位于 PPU 地址空间 0x3f00 ~ 0x3f0f;另一组用于 Sprite 渲染,位于 PPU 地址空间 0x3f10 ~ 0x3f1f。每组子调色板又分出了 4 个子调色板,共计 8 个子调色板。
子调色板
子调色板只包含 4 种颜色,共 8 个。每组子调色板理论上可以表示 4x4 共 16 种颜色,但由于每个调色板的 0 号位置用于表示背景色(背景色定义在 $3f00),因此每组子调色板只能表示 13 种颜色。
参考:https://www.nesdev.org/wiki/PPU_palettes
MMC
Memory Management Chip(内存管理芯片)的简称。是一类特殊芯片,用于把 CPU 或 PPU 的地址映射到外部存储器的地址空间中,实际结果相当于扩大了地址空间,使得 CPU 或 PPU 可以使用更大的内存。例如,CPU 访问地址空间 $8000 ~ $ffff 内的内存时,MMC 可以把这个范围内的地址映射到外部存储器的 $020000 ~ $027fff 范围内。原本主板上 $8000 ~ $ffff 这个范围内没有任何存储设备(参考 nesdev CPU Memory Map),是读取不到内容的,现在就可以了。通过将 $8000 ~ $ffff 范围内的地址映射到外部存储器不同的位置上,我们就能访问更大内存。MMC 一般是有状态的,即提供控制寄存器,以便控制 MMC 让它把地址映射到不同的范围。切换映射范围的过程叫“换页”(Bank Swiching)。
Bank
内存页。MMC 在切换映射范围时,通常是以固定大小整体映射。例如,以 32 KB 大小为单位按公式 n * 32768 + (addr % 32768) 对 $8000 ~ $ffff 范围的地址进行映射。这个示例中,32 KB 大小的内存块就是一个 Bank。可以看出,外部存储器的容量必须为 Bank 容量的整数倍。常见的 Bank 大小有 8 KB、16 KB 和 32 KB。
Bank Switching
通过配制 MMC,MMC 可以把同一个范围内的地址映射到外部存储器地址空间中不同的范围上,这个切换过程就叫 Bank Switching。
Mapper
Mapper 是 NES 模拟器中的概念,是对 MMC 及卡带本身硬件行为的抽象。
参考资料
NES 名词解释的更多相关文章
- nodejs、npm、grunt——名词解释
最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...
- Sql常用语法以及名词解释
Sql常用语法以及名词解释 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) D ...
- 转OSGchina中,array老大的名词解释
转OSGchina中,array老大的名词解释 转自:http://ydwcowboy.blog.163.com/blog/static/25849015200983518395/ osg:: Cle ...
- css名词解释
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- sudo权限添加 和 rpm、deb之名词解释
sudo权限添加: 刚开始用Center_os Linux操作系统,想装个输入法,搜了一下,看到linux下的搜狗输入法(帖子链接)下载下来的文件的扩展名是.deb,直接用帖子上的一个命令: sudo ...
- SourceTree&Git部分名词解释
SourceTree&Git部分名词解释 克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库 提交(commit):将暂存文件上传到本地仓库(我们在Finder中对本地仓 ...
- b2c项目基础架构分析(二)前端框架 以及补漏的第一篇名词解释
继续上篇,上篇里忘记了也很重要的前端部分,今天的网站基本上是以一个启示页,然后少量的整页切换,大量的浏览器后台调用web服务局部.动态更新页面显示状态这种方式在运作的,从若干年前简单的ajax流行起来 ...
- b2c项目基础架构分析(一)b2c 大型站点方案简述 已补充名词解释
我最近一直在找适合将来用于公司大型bs,b2b b2c的基础架构. 实际情况是要建立一个bs架构b2b.b2c的网站,当然还包括wap站点.手机app站点. 一.现有公司技术人员现状: 1.熟悉asp ...
- Lucene/ElasticSearch 学习系列 (2) Information Retrival 初步之名词解释
计算机领域一半是理论,一半是在理论基础之上的应用.要想深入地掌握某个方面的应用,就需要先学习那方面的理论. “搜索”是应用,其背后的理论是 "Information Retrieval&qu ...
- BI名词解释
BI名词解释 浏览数Page Views: 网页(含文件及动态网页)被访客浏览的次数.Page View的计算范围包括了所有格式的网页,例如:.htm..html..asp..cfm. asa ...
随机推荐
- 聚焦OLAP性能提升,火山引擎ByteHouse发布六大场景解决方案
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群. 性能在数据分析中至关重要,它直接决定数据处理的效率与及时性,进一步对数据驱动的企业决策造成影响. 举个例 ...
- 在python项目的docker镜像里使用pdm管理依赖
前言 在 DjangoStarter 项目中,我已经使用 pdm 作为默认的包管理器,不再直接使用 pip 所以部署的时候 dockerfile 和 docker-compose 配置也得修改一下. ...
- 使用Web Component定义自己的专属网页组件
什么是Web Component Web Component是一套Web浏览器的技术和规范,能够让开发者定制自己的HTML元素 来自MDN的描述: Web Component 是一套不同的技术,允许你 ...
- JavaScript魔法:在线Excel附件上传与下载的完美解决方案
最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/ 前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Exce ...
- 告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧 本文介绍了五种加速在国内访问和下载 GitHub 的方法,包括:使用 Gitee 平台加速克隆代码.修改 hosts 文件.使用油猴 ...
- 精读代码,实战进阶&实践Task2
背景 从零入门AI生图原理&实践 是 Datawhale 2024 年 AI 夏令营第四期的学习活动("AIGC"方向),基于魔搭社区"可图Kolors-LoRA ...
- C#反射在数据库连接时的应用
反射的应用 1.查找指定ID的数据 //查找指定id的数据,返回指定的对象 private T FindData<T>(int id) { Type ty = typeof(T); //在 ...
- Vue开发转到React开发,Prettier - Code formatter失效的问题
Vue转到React,Prettier - Code formatter失效,按下Ctrl+S无效,需要手动格式化一次 然后选择默认的格式化方式 之后按下Ctrl+S就可以进行格式化啦!!!
- 每天5分钟复习OpenStack(十五)Ceph与Bcache结合
上一章我们成功部署了bcache,这一章我们将Ceph与Bcache结合来使用,使用Bcache来为ceph的数据盘提速. 1 ceph 架构 一个标准的ceph集群可能是如下的架构,SSD/NVME ...
- JavaScript – Rest Parameters & Spread Operator
介绍 Rest 和 Spread 的共同点是语法都是 ... (点点点). 但它们的概念是相反的. 看例子体会: Rest Parameters 参考: 阮一峰 – rest 参数 rest para ...