INT15 A20 Control

INT15 A20 Control

1.  Overview

 

INT15是一个Misc  Function 很多乱七八糟的功能都被放在 INT15中实现。比较常见的有这样几个功能:1.CPU Micro Code Update 2.VBIOS  call back Function3. A20 Control   Function 之前我并不知道INT15 A20 Control Function的功能,一次偶然机会 debug 一个PXE网络ghost的问题 发现每次DOS下的ghost软件运行到一半就报错了, 然后利用DOS下的单步执行的功能就发现每次执行完加载HIMEM.SYS之后就挂了,而HIMEM.SYS是一个和高端内存相关的一只Driver 于是就怀疑可能和A20有关,后来按照CRB Release History Update了一个INT15CBbin文件 bug就解了,当时因为赶时间就没有仔细去找原因,也不太明白为什么,直到最近查文档才偶然发现原来INT15 有一直A20 Control FunctionA20 Control Function调用的格式如下所示:

INT 15 AX=2400 disable A20
INT 15 AX=2401 enable A20
INT 15 AX=2402 query status A20
INT 15 AX=2403 query A20 support (kbd or port 92)

2. A20 Control

 

A20的问题指的是早期的8088 CPU地址线只有20位,最高只能寻址0x100000的地址空间,对于超出这个地址空间的寻址会导致地址回绕的现象。后来CPU地址线发展的原来越多(24,32,36…)为了完全兼容8088实模式下的运行方式就发现一个开关用于控制A20,通常该开关使用KBC 8042的一个没有用的pin来控制,但是因为KBC的芯片并不完全兼容,后来又出现了port  0x92以及0xee 的控制方式。这些控制方式的sample code分别如下所示:

1.KBC Control

call    empty_8042

mov     al,#0xd1            ! command write

out     #0x64,al

call    empty_8042

mov     al,#0xdf            ! A20 on

out     #0x60,al

call    empty_8042

 

2.Port 0x92 Control

inb     $0x92, %al        #

orb     $02, %al          # "fast A20" version

outb    %al, $0x92                       # some chips have only this

3. Port 0XEE Control

FAST A20 GATE          EEh          N/A         82360SL         8  

Inb FAST A20 GATE                          #enable A20

outb 0x00 FAST A20 GATE            #disable A20     

因为控制的方式并不统一,这样系统软件开启A20的实现方式也就没法统一,而唯一知晓平台A20控制方式的就只有SBIOS,于是就指定INT15A20 Control Function 把具体的实现丢给SBIOS

Refer

 

A20 - a pain from the past

 

Peter

2010-11-07

你可能感兴趣的:(function,网络,dos,command,query,文档)