如何select CMOS寄存器?

How to select CMOS register?

我正在开发单片内核并尝试实现对 CMOS 时钟的支持。阅读主题后,我遇到了这行代码:

outb (0x70, (NMI_disable_bit << 7) | (selected CMOS register number));

除了 NMI_disable_bit 部分,我基本上明白发生了什么。这在这段代码中意味着什么?有人可以给我解释一下吗?

端口 0x70 的第 7 位,RTC RAM 索引寄存器用于设置为 1 时,禁用 NMIs 的所有源。

NMI 是一个无法被 IF 屏蔽的中断 - R/E/FLAGS 寄存器中的中断标志(例如使用 cli 指令)所以需要硬件协助才能禁用它。
端口 0x70 的位 7 取反并与所有 NMI 源(或等效设计)进行与运算。

请注意,自 Pentium Pro 以来,NMI 引脚已被 LINT1 引脚取代。
LAPIC 被禁用时,LINT1 引脚恢复为 NMI 引脚,但如果 LAPIC 被启用,则术语 NMI 是 本地中断 1 的同义词,软件可以编程每个 LINT0/1 引脚触发各种事件(包括但不限于 NMI)。