内存映射
3.1 概述
Zeal Video Board 需要专用的视频 RAM(VRAM)来存储图形数据。与许多 8 位系统中通常从主系统 RAM 中分配 VRAM 不同,ZVB 包含自己的内部 RAM。这意味着主机系统无需为视频目的分配或预留任何自己的内存。
由于 Zeal Video Board 最初是作为 Z80 计算机的协处理器设计的,它遵循 Z80 的总线分段方式,具有两种不同的总线:
- 内存总线,使用所有地址线
- I/O 总线,仅使用地址的最低 8 位线。
为了提高与缺乏专用 I/O 总线的系统的兼容性,所有 ZVB 控制器及其寄存器也可以通过内存总线访问。
3.2 内存总线
Zeal Video Board 需要大约 80KB 的内部内存,但由于对齐约束和内部优化,这些内存必须位于 128KB 的内存范围内。
需要理解的是,并非所有 128KB 的内存范围都实际被使用。内存是分散分布的,被使用的部分之间存在一些间隙。尽管只需要大约 80KB,但主机仍然必须在地址空间中保留完整的 128KB 范围:
视频 RAM 内存起始于 PADDR 物理地址。在启动和复位时,PADDR 内部设置为 0x100000(1MB)。关于物理地址如何计算或在地址空间较小的计算机上如何映射的更多详情,请参阅《系统配置》章节的《物理地址》部分
视频内存
视频内存的第一部分大小为 16KB,其组织方式如下:
注意:组件之间的间隙是未映射的内存,视频板不会响应在此处的任何请求,但其他硬件设备也不得使用这些区域。
层 0 和层 1 的 tilemap 分别映射到偏移量 0x0000 和 0x1000,两者均为 3200 字节。有关其用法和组织方式的更多详情,请参阅Tilemap 内存。
图中红色区域代表也可通过 I/O 总线访问的 I/O 控制器。例如,System Configuration 寄存器在内存中映射到偏移量 0x1FE0,但也可在 I/O 端口地址 0x80 处访问,如下方 I/O 总线 部分所示。如您所见,每个控制器在内存映射地址空间中占用 32 字节,但在 I/O 总线上仅占用 16 字节。这使得通过内存访问时可以实现额外的功能或扩展特性。
所有现有控制器以及未来的扩展都映射在从偏移量 0x2000 开始到 0x2800 的区域。此范围允许最多 64 个外设,每个外设占用 32 字节区域。每个控制器的起始偏移量计算方式为 idx * 32,其中 idx 是该控制器的索引。
您可以在系统配置章节的 I/O 控制器部分找到所有已实现控制器的列表。
注意:截至目前,没有控制器使用超过 16 字节,因此额外的内存空间暂时未被使用。
3.3 I/O 映射
为了简化和加速对最常用外设的访问,视频板也在 I/O 总线上映射自身:

我们可以注意到,前两个模块与前面描述的内存映射中的模块相同,区别在于此总线上只可见前 16 个寄存器(目前,没有外设/模块达到此限制)。
第三个 16 字节模块是外设组(peripheral bank)。它允许主机 CPU 映射位于视频内存偏移量 0x2000 开始的 64 个外设中的任何一个。如前所述,每个控制器只有前 16 个字节可通过此方式访问。这一设计选择有助于防止视频板在已比主内存总线小得多的 I/O 总线上占用过多空间。
此组通过写入系统配置控制器的 MAPPED_DEVICE 寄存器来配置。有效值列表请参阅I/O 控制器部分。