实现 NES 中的一些笔记:nametable 的 mirror 计算

实现 NES 中的一些笔记:nametable 的 mirror 计算

💡 原文中文,约4200字,阅读约需10分钟。
📝

内容提要

本文介绍了NES红白机中nametable的镜像计算,包括渲染过程、分辨率、Pattern Table和Attribute Table的作用,以及四个nametable的布局和镜像计算方式。作者还提供了两种计算方式的代码和性能测试结果,并总结了古早系统中为了性能而采用的各种技巧。

🎯

关键要点

  • NES红白机的渲染过程复杂,屏幕分辨率为256x240,基本渲染单元为tile。
  • 每个tile为8个像素,屏幕上有3230个tile,背景图案存放在Pattern Table中。
  • Attribute Table存放每个tile的属性,如颜色和翻转信息。
  • NES设计了四个nametable,理论空间为4KB,但PPU的VRAM只有2KB。
  • 为了复用背景,采用mirror计算,四个nametable的布局为A、B、C、D。
  • 常见的mirror计算方式有垂直镜像和水平镜像。
  • 使用哈希表进行地址映射,但需要额外空间和寻址操作。
  • 提出更高效的取模运算方法来优化镜像计算。
  • 通过位运算和模运算简化了水平镜像的计算逻辑。
  • 性能测试显示新方法比旧方法快约30%。
  • 总结古早系统中为了性能所采用的各种技巧。
➡️

继续阅读