【问题标题】:What is meant by memory-mapped video?内存映射视频是什么意思?
【发布时间】:2018-06-29 23:09:20
【问题描述】:

内存映射视频是什么意思?例如,在 x8086 Intel CPU 上,它有一个 20 位地址线。这种内存映射是否意味着某些 x8086 地址线已硬连线到视频适配卡?

【问题讨论】:

  • 在一个简单的实现中,是的。一些高位将用于解码芯片选择信号以检测何时访问视频卡,而低位将在内存中寻址。另请参阅ISA bus
  • 对于 x86,内存映射意味着没有 I/O 映射。内存/I/O 引脚设置为内存。 video is/was both I/O and memory mapped, the registers I/O and the video memory, memory mapped.上下文是什么,该术语可能还有其他来源。请添加更多上下文。

标签: assembly memory x86 cpu cpu-registers


【解决方案1】:

例如,在 x8086 Intel CPU 上,它有一个 20 位地址线。

先了解一下背景

(与大多数其他 CPU 不同)x86 CPU 有两个地址范围:

  • 实际内存地址范围(以“mov al, [ds:di]”为例)

    此内存范围用于内存。

  • 使用inout 指令访问的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 是中断控制器。

内存映射视频是什么意思?

“Memory-mapped I/O”表示某些设备使用“memory”地址空间而不是“I/O”地址空间进行寻址:

通过读取和写入内存地址 0xA0000-0xBFFFF(取决于视频模式)来寻址视频适配器,而不是使用 inout 指令。

(对于根本没有两个地址范围概念的 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 CPU 也用于移动和嵌入式设备。在这样的系统中,内存布局(取决于 CPU外部的电路)可能会有所不同。

【讨论】:

  • 虽然视频内存是地址空间的一部分,但传统视频控制器也有用于编程的 I/O 端口。内存映射 I/O 是一个示例,其中端口寻址被替换为 I/O 端口映射到物理或虚拟地址空间。如果内存映射 I/O 没有硬编码,那么在引导过程中,控制器的内存映射 I/O 的基地址会被分配。我不记得这个启动过程的细节了。
【解决方案2】:

并非完全从 CPU 或主板端硬连线,但所有内存访问都在扩展总线上可见。任何声称拥有地址范围所有权的板都会回复来自处理器的读取或写入请求。

在扩展总线上配备专用 RAM 板并不少见,因为许多早期的主板无法容纳整个 640k。因此,位于视频板上的一些扩展 RAM 并没有什么神奇之处。

此外,由于早期的 PC 在视频板上没有专用的图形处理器,主 CPU 无论如何都必须完成所有渲染,因此出于性能原因需要直接访问图形缓冲区。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2018-10-22
    • 1970-01-01
    相关资源
    最近更新 更多