0
Org 0xe05b; POST Entry Point
Post:
xor ax, ax

,, First reset the DMA controllers
0x0d out at
0xda out at

,, Then initialize the DMA controllers
mov al, # 0xC0
0xD6 out at; cascade enabled mode of channel 4
mov al, # 0x00
out 0xD4, al; unmask channel 4

我做了一些研究,但我无法弄清楚 0xc0 是什么意思?DMA 寄存器端口 0xD6 和 0xD4 中的哪个寄存器对应?

4

1 回答 1

1

您可能想查看此站点:OS Dev Wiki: ISA DMA Controller。它有很多关于传统 PC 设备的有用信息。

你必须原谅我,因为我对此有点生疏,但是:

寄存器 0x​​D6 - 主 DMA 控制器的DMA 模式寄存器。写入 0xC0 (1100 0000b) 将控制器设置为菊花链系统上的另一个(从)DMA 控制器。位 6 和 7 确定芯片应处于的模式:

  • 00 - 按需传输
  • 01 - 单次 DMA 传输
  • 10 - 块 DMA 传输
  • 11 - 级联模式(这是 0xC0 选择的模式

PC 兼容系统有两个这样的 DMA 控制器级联在一起,以提供总共 7 个功能通道(1 个在菊花链中丢失)。

寄存器 0x​​D4 - 主 DMA 控制器的单通道掩码寄存器。它可用于单独关闭/打开给定通道的掩码。位 0 和 1 表示所需的通道,位 2 是掩码使能。写入 0x00 可确保通道 4(即主 DMA 控制器上的通道 0)未被屏蔽,因此通道 0-3 也不会被屏蔽。

如果其中任何一个令人困惑/不正确,我提前道歉!

于 2013-06-20T21:04:37.420 回答