内存映射视频是什么意思?
What is meant by memory-mapped video?
内存映射视频是什么意思?例如,在 x8086 Intel CPU 上,它有一个 20 位地址线。此内存映射是否意味着某些 x8086 地址线已硬连线到视频适配卡?
For example, on a x8086 Intel CPU, it has a 20 bit address line.
先来点背景知识
(与大多数其他 CPUs 不同)x86 CPUs 有两个地址范围:
实际内存地址范围(以“mov al, [ds:di]
”访问为例)
此内存范围用于内存。
使用in
和out
指令访问的I/O地址范围
此“内存”范围适用于 I/O。
8086其实有21条地址线:A19-A0和“M/nIO”。 A19-A0 行包含实际地址,“M/nIO”行包含访问“常规”内存或 I/O 范围的信息。
在 x86 PC (*) 内存区域 (M/nIO = 1) 中的地址 0x00021 是 RAM 而 I/O 范围 (M/nIO = 0) 中的地址 0x0021 是中断控制器。
What does memory-mapped video means?
“内存映射 I/O”表示某些设备使用“内存”地址 space 而不是使用“I/O” 地址 space 寻址:
视频适配器通过读取和写入内存地址 0xA0000-0xBFFFF(取决于视频模式)寻址,而不是使用 in
和 out
指令。
(因为 CPU 根本没有两个地址范围的概念 - 就像 ARM - 有时也说 CPU 使用内存映射 I/O。这意味着所有 I/O 设备都像内存一样寻址,并且没有针对 I/O 寻址的特殊说明。)
在视频的情况下,这个词可能有更特殊的含义:
在某些系统中,您必须使用多个 I/O 访问来访问视频内存:
如果你想使用 TMS9918 视频芯片(在 1980 年代流行)将数据写入视频内存,你首先必须写入一个值来指定视频 RAM 中的地址,然后你必须写入实际的数据。 CPU 总是必须将两个值(视频 RAM 地址和数据)写入相同的地址 - 与应该写入的视频 RAM 中的地址无关。
如果有人说视频不是内存映射,我会理解系统有这种行为。
在 x86 PC 上 (*) 情况并非如此:视频 RAM 中的某个地址对应于某个 CPU 地址。因此,如果您想在视频 RAM 中写入 10 个不同的地址,CPU 只需将数据写入 10 个不同的地址。
(*) 我不写 x86“系统”,因为 x86 CPUs 也用于移动和嵌入式设备。在这样的系统中,内存布局(取决于电路 outside CPU)可能不同。
不完全是从 CPU 或主板端硬接线,但所有内存访问在扩展总线上都是可见的。任何声称拥有地址范围的电路板都会回复来自处理器的读取或写入请求。
在扩展总线上安装专用 RAM 板并不少见,因为许多早期的主板无法容纳整个 640k。因此,视频板上的一些扩展 RAM 没什么神奇的。
此外,由于早期 PC 的视频板上没有专用的图形处理器,主 CPU 无论如何都必须进行所有渲染,因此需要直接访问图形缓冲区以提高性能原因。
内存映射视频是什么意思?例如,在 x8086 Intel CPU 上,它有一个 20 位地址线。此内存映射是否意味着某些 x8086 地址线已硬连线到视频适配卡?
For example, on a x8086 Intel CPU, it has a 20 bit address line.
先来点背景知识
(与大多数其他 CPUs 不同)x86 CPUs 有两个地址范围:
实际内存地址范围(以“
mov al, [ds:di]
”访问为例)此内存范围用于内存。
使用
in
和out
指令访问的I/O地址范围此“内存”范围适用于 I/O。
8086其实有21条地址线:A19-A0和“M/nIO”。 A19-A0 行包含实际地址,“M/nIO”行包含访问“常规”内存或 I/O 范围的信息。
在 x86 PC (*) 内存区域 (M/nIO = 1) 中的地址 0x00021 是 RAM 而 I/O 范围 (M/nIO = 0) 中的地址 0x0021 是中断控制器。
What does memory-mapped video means?
“内存映射 I/O”表示某些设备使用“内存”地址 space 而不是使用“I/O” 地址 space 寻址:
视频适配器通过读取和写入内存地址 0xA0000-0xBFFFF(取决于视频模式)寻址,而不是使用 in
和 out
指令。
(因为 CPU 根本没有两个地址范围的概念 - 就像 ARM - 有时也说 CPU 使用内存映射 I/O。这意味着所有 I/O 设备都像内存一样寻址,并且没有针对 I/O 寻址的特殊说明。)
在视频的情况下,这个词可能有更特殊的含义:
在某些系统中,您必须使用多个 I/O 访问来访问视频内存:
如果你想使用 TMS9918 视频芯片(在 1980 年代流行)将数据写入视频内存,你首先必须写入一个值来指定视频 RAM 中的地址,然后你必须写入实际的数据。 CPU 总是必须将两个值(视频 RAM 地址和数据)写入相同的地址 - 与应该写入的视频 RAM 中的地址无关。
如果有人说视频不是内存映射,我会理解系统有这种行为。
在 x86 PC 上 (*) 情况并非如此:视频 RAM 中的某个地址对应于某个 CPU 地址。因此,如果您想在视频 RAM 中写入 10 个不同的地址,CPU 只需将数据写入 10 个不同的地址。
(*) 我不写 x86“系统”,因为 x86 CPUs 也用于移动和嵌入式设备。在这样的系统中,内存布局(取决于电路 outside CPU)可能不同。
不完全是从 CPU 或主板端硬接线,但所有内存访问在扩展总线上都是可见的。任何声称拥有地址范围的电路板都会回复来自处理器的读取或写入请求。
在扩展总线上安装专用 RAM 板并不少见,因为许多早期的主板无法容纳整个 640k。因此,视频板上的一些扩展 RAM 没什么神奇的。
此外,由于早期 PC 的视频板上没有专用的图形处理器,主 CPU 无论如何都必须进行所有渲染,因此需要直接访问图形缓冲区以提高性能原因。