如何打开A20地址线的方法

今天才知道,打开A20地址线有三种方法,这篇文章介绍的:http://kernelx.weebly.com/a20-address-line.html,我先记下来,留备后用。
A20 gate
When IBM PC AT System was introduced ,the new Intel 286 processor was not compatible with the old x86 processor.The older x86 micro-processors(Intel 8086) had address bus of 20bits which would total and give access up to 1megabyte of memory.The Intel 386 and above had address bus up to 32 bits allowing 4 Gigabytes of memory.But the old 8086 processors did not have such a big address bus.To keep in compatible with the older processors and solve the problem the Intel introduced a logical OR gate at the 20 bit of the address bus which could be enabled a or disabled.So, to keep in compatible with the older processors and programs the A20 is disabled at the startup.

NOTE:BIOS actually enables the A20 for counting and testing the available memory and then disables it before booting again to keep in compatible with older processors.

The A20 gate is an electronic OR gate which can be disabled and enabled and placed at the 20th bit of the address bus.It is connected through a P21 line of the keyboard controller which made it possible for the keyboard controller to enable or disable the A20 Gate.

In the current generations, there is a need to have memory lot more than just 1MB.The applications, games,etc need a lot of memory.Even a operating system kernel might eat up the whole 1MB.So it is something like impossible to run modern programs in 1MB of memory.Looks like the A20 is an important feature for good functional of the operating system.

To enable the A20 gate there are 3 methods or you can skip this step by using the high memory managers such as HIMEM.sys or using bootloaders such as GRUB(GRUB will set up you up with protected mode with A20 enabled)

The 3 methods for enabling the A20 Gate are
1. Keyboard Controller
2. BIOS Function
3. System Port

===============================================================================================

Keyboard Controller:
This is the most common method of enabling A20 Gate.The keyboard micro-controller provides functions for disabling and enabling A20.Before enabling A20 we need to disable interrupts to prevent our kernel from getting messed up.The port 0x64 is used to send the command byte.

Command Bytes and ports
0xDD Enable A20 Address Line
0xDF Disable A20 Address Line

0x64 Port of the 8042 micro-controller for sending commands

Using the keyboard to enable A20:

EnableA20_KB:
cli ;Disables interrupts
push ax ;Saves AX
mov al, 0xdd ;Look at the command list
out 0x64, al ;Command Register
pop ax ;Restore’s AX
sti ;Enables interrupts
ret

Using the BIOS functions to enable the A20 Gate:
The INT 15 2400,2401,2402 are used to disable,enable,return status of the A20 Gate respectively.

Return status of the commands 2400 and 2401(Disabling,Enabling)
CF = clear if success
AH = 0
CF = set on error
AH = status (01=keyboard controller is in secure mode, 0x86=function not supported)

Return Status of the command 2402
CF = clear if success
AH = status (01: keyboard controller is in secure mode; 0x86: function not supported)
AL = current state (00: disabled, 01: enabled)
CX = set to 0xffff is keyboard controller is no ready in 0xc000 read attempts
CF = set on error

Disabling the A20

push ax
mov ax, 0x2400
int 0x15
pop ax

Enabling the A20
push ax
mov ax, 0x2401
int 0x15
pop ax

Checking A20
push ax
push cx
mov ax, 0x2402
int 0x15
pop cx
pop ax

=====================================================================================

Using System Port 0x92
This method is quite dangerous because it may cause conflicts with some hardware devices forcing the system to halt.

Port 0x92 Bits
Bit 0 - Setting to 1 causes a fast reset
Bit 1 - 0: disable A20, 1: enable A20
Bit 2 - Manufacturer defined
Bit 3 - power on password bytes. 0: accessible, 1: inaccessible
Bits 4-5 - Manufacturer defined
Bits 6-7 - 00: HDD activity LED off, 01 or any value is “on”

Code to enable A20 through port 0x92
push ax
mov al, 2 out 0x92, al pop ax

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值