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 ...
随机推荐
- Apache DolphinScheduler 1.3.4升级至3.1.2版本过程中的踩坑记录
因为在工作中需要推动Apache DolphinScheduler的升级,经过预研,从1.3.4到3.1.2有的体验了很大的提升,在性能和功能性有了很多的改善,推荐升级. 查看官方的升级文档,可知有提 ...
- 在lcd屏幕上的任意位置显示任意大小的图片
/************************************************* * * file name:ShowBmp2.c * author :momolyl@126.co ...
- MFC实现屏幕截屏
屏幕截屏 void CMainFormDlg::GetScreenPic(Rect area, OUT Mat &img, float rate, bool gray) { CDC *pDC ...
- Java String 去掉特殊字符之前的内容方法
为了去除字符串中某个特殊字符之前(包括该特殊字符本身)的所有内容,我们可以使用Java中的String类的substring和indexOf方法.这里,我将给出一个完整的代码示例,该示例会找到字符串中 ...
- 记一次解决OTA死机重启bug,如何分析与解决措施?!
背景: 平台:stm32mp151平台 什么是OTA? 说起OTA我们应该都不陌生,它是一种可以为设备无损失升级系统的方式,能将新功能远程部署到产品上. 我们不仅可以通过网络下载OTA升级包,也可以通 ...
- 【Homebrew】之相关命令问题合集及iOS真机调试包
一.Homebrew更换国内镜像源(中科大.阿里.清华) Homebrew主要有四个部分组成: brew.homebrew-core .homebrew-bottles.homebrew-cask. ...
- maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器
开心一刻 有一天螃蟹出门,不小心撞倒了泥鳅泥鳅很生气地说:你是不是瞎啊!螃蟹说:不是啊,我是螃蟹 概述 maven-shade-plugin 官网已经介绍的很详细了,我给大家简单翻译一下 This p ...
- Locust 进行分布式负载测试
什么是 Locust Locust 是一个开源的负载测试工具,用于测试网站和其他应用程序的性能.它通过编写 Python 脚本来定义虚拟用户的行为,模拟这些用户对目标系统发起请求.Locust 提供了 ...
- 006.MinIO基础使用
图形界面基础使用 bucket bucket创建 图形界面创建bucket. 特性: Versioning 开启版本控制,开启版本控制则允许在同一键下保持同一对象的多个版本. Object Locki ...
- SimMTM: 用于掩码时间序列建模的简单预训练框架《SimMTM: A Simple Pre-Training Framework for Masked Time-Series Modeling》(预训练模型、时序表征学习、掩码建模、流行学习、近邻聚合、低级表示学习(掩码)、高级表示学习(对比)、segment-wise 和point- wise)
今天是2024年7月3日10:15,写一篇1月7日就看过的论文,哈哈哈哈哈哈哈哈哈,突然想到这篇论文了. 论文:SimMTM: A Simple Pre-Training Framework for ...