A20Line

A20Line

Content #

早先8086的地址线只有20位(A0-A19),每次当物理地址到达最高端0xFFFFF时,再加1的话,地址会绕回0x00000。部分程序员的代码依赖了这个特性,为了兼容旧的程序,IBM-AT(Intel 286)在默认情况下关闭了这条地址线。

IBM公司用一个与门来控制第21根地址线A20,并把这个与门的控制阀门放在键盘控制器内,端口号是0x60。

不过,这种做法很烦琐,因为要访问键盘控制器,需要先判断状态,等键盘控制不忙。需要至少十几个步骤。

从80486开始,处理器有了A20M#引脚,意思是A20屏蔽(A20 Mask)。

输出输出控制器集中芯片ICH中有一个用于兼容老式设备的端口0x92。其第1位叫做替代的A20门控制(Alternate A20 Gate, ALT_A20_GAGE),它和老式的来自键盘控制器的A20控制线一起,通过或门连接到处理器的A20#引脚。通过0x92端口非常迅速,因此称为Fast A20。

0x92的第0位称为INIT_NOW,当它从0过渡到1时,ICH芯片会使用处理器INIT#引脚的电平变低(有效),并至少保持16个PCI时钟周期。向这个位置写入1,会引起处理器复位。而且会将ALT_A20_GATE置为1.也就是说,第21根线会自动启用。

Fast A20 Gate用于快速打开这条地址线。打开的汇编代码如下:

in al, 0x92
or al, 2
out 0x92, al

Viewpoint #

From #

A20_Line