Gate A20与保护模式

合集下载

BIOS选项使用说明

BIOS选项使用说明

BIOS选项使用说明一、STANDARD CMOS SETUP(标准CMOS设置)这里是最基本的CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体)系统设置,包括日期、驱动器和显示适配器,最重要的一项是halt on:系统挂起设置,缺省设置为All Errors,表示在POST(Power On Self Test,加电自测试)过程中有任何错误都会停止启动,此选择能保证系统的稳定性。

如果要加快速度的话,可以把它设为No Errors,即在任何时候都尽量完成启动,不过加速的后果是有可能造成系统错误,请按需选择吧。

1、Drive A/Drive B选项:360K,5.25in;1.2M,5.25in;720K,3.25in;1.4M,3.25 in;2.88M,3.25in设置合适的驱动器,如果没有相应的硬件,尽量设为None,可以提高系统自检速度。

2、Video(视频)选项:EGA/VGA,Mono(黑白显示器)设成EGA/VGA吧,不要尝试改为Mono,会减慢启动速度的。

二、BIOS FEATURES SETUP(BIOS特征设备)1、Virus Warning/Anti-Virus Protection(病毒警告/反病毒保护)选项:Enabled(开启),Disabled(关闭),ChipAway(芯片控制)这项设置可防止外部程序对启动区和硬盘分区表的写入,当发生写入操作时,系统会自动产生警告并提示用户中断程序的执行。

它并不能保护整个硬盘,而且对于操作系统的安装(例如WINDOWS95/98)及某些磁盘诊断程序,甚至对BIOS的升级,都可能产生不必要的冲突而引致程序的中断。

建议用户将这选项关闭,系统的认值是Disable。

某些主板自带有抗病毒内核,它可以提供比普通病毒警告更高一层的防卫,不过,当使用自带BIOS的外围控制器(如SCSI卡或UltraDMA 66控制卡)时,启动区病毒可以绕过系统BIOS来进行攻击,保护将完全失效。

DELL 台式机 指示灯状态 说明

DELL 台式机 指示灯状态 说明

警告:开始执行本节中的任何步骤之前,请阅读并遵循《产品信息指南》中的安全说明。

为帮助您排除故障,计算机前面板或背面板上配备了四个指示灯,分别标有“1”、“2”、“3”和“4”。

这些指示灯可以不亮或呈绿色。

计算机正常启动时,指示灯的显示方式或代码将随引导进程的完成情况而更改。

计算机正常启动时,指示灯的显示方式或代码将随引导进程的完成情况而更改。

如果系统引导的 POST 阶段成功完成,则四个指示灯均将呈绿色稳定亮起。

如果计算机在 POST 进程期间出现故障,LED 的显示方式可能有助于识别计算机终止进程的位置。

注:诊断指示灯的方向可能会因系统类型的不同而有所不同。

诊断指示灯可能垂直显示也可能水平显示。

哔声代码
如果无法在显示器上显示错误或问题,则计算机可能会在启动期间发出一连串哔声。

这一连串哔声称为哔声代码,用于标识问题。

例如,某哔声代码(代码 1-3-1)为:一声哔声、接着连续三声哔声,然后又是一声哔声。

它表示计算机出现内存故障。

如果计算机在启动期间发出哔声,请:
在诊断程序核对表中记下哔声代码。

运行 Dell 诊断程序以识别更严重的原因。

与 Dell 联络寻求技术帮助。

错误信息
请在完成以下检查时填写诊断程序核对表。

警告:开始执行本节中的任何步骤之前,请阅读并遵循《产品信息指南》中的安全说明。

对于未列出的信息,请参阅操作系统说明文件或信息出现时所运行的程序的说明文件。

DELL开机报警详解

DELL开机报警详解

dell 380台式机开机后报警一、1短声——系统正常启动。

二、2短声——常规错误。

应进入CMOS重设错误选项。

三、1长1短声—— RAM或主板出错。

四、1长2短声——显示器或显卡错误。

五、1长3短声——键盘控制器出错。

六、1长9短声——主板FlashRAM或EPROM错误。

七、不间断长声——内存未插好或有芯片损坏。

八、不停响声——显示器未与显卡连接好。

九、重复短声——电源故障。

十、无声且无显示——无电源,或CMOS电池耗尽,或CPU出错。

1、如果声音长声不断响,有可能是内存条未插紧2、如果声音快速短声响两次(例如滴、滴):有可能是CMOS设置错误,需要重设,这种情况出现最多,屏幕画面的底部(一般在左下)会出现英文提示“CMOS CHECKSUM FAILURE ”,然后要求按F?(F?可能是F1-F12,视乎主板)载入默认设置或者进入。

另外,刷新/更新BIOS后也有可能出现这个问题,载入默认设置就好了。

3、如果声音是一长声一短声的,有可能是内存或主板错误。

4、如果声音是一长声两短声的,有可能是显示器或显卡错误。

5、如果声音是一长声三短声,有可能是键盘控制器错误。

6、如果声音是一长声九短声,有可能是主板BIOS的FLASH RAM 或EPROM 错误。

1、如果声音只是一短声响,有可能是内存刷新故障。

2、如果声音是快速短声响两次,有可能是内存ECC校验错误。

3、如果声音是快速短声响两次,有可能是系统基本内存检查失败。

4、如果声音是快速短声响四次,有可能是系统时钟出错。

5、如果声音是快速短声响五次,有可能是CPU出现错误。

6、如果声音是快速短声响六次,有可能是键盘控制器错误。

7、如果声音是快速短声响七次,有可能是系统实模式错误。

8、如果声音是快速短声响八次,有可能是显示内存错误。

9、如果声音是快速短声响九次,有可能是BIOS芯片检验错误。

10、如果声音是一长声三短声,有可能是内存错误。

祝你好运!开机报警音AMI一短声:内存两短声:parity check三短声:内存前64K四短声:系统定时器五短声:cpu六短声:键盘控制线路七短声:cpu虚拟86模式发生例外,中断错误八短声:显卡没插好或显卡上的内存有问题九短声:checksum error一长声三短声:主存储器或扩充内存一长声八短声:视讯扫描测试有问题Award BIOS1短系统正常启动2短常规错误,请进入CMOS SETUO重新设置不正确的选项1长1短RAM或主板出错1长2短显示错误(显示器或显卡)1长3短键盘控制器错误1长9短主板Flash RAM不停的长响内存没插稳或已损坏不停的响电源或显示器或显卡没连接好不停的短响电源故障无声音无提示电源故障Phoenix BIOS1短系统正常启动3短系统加电自检初始化失败1短1短2短主板错误1短1短3短主板电池没电或CMOS损坏1短1短4短ROM BIOS校验出错1短2短1短系统实时时钟出错1短2短2短DMA通道初始化失败1短2短3短DMA通道页寄存器出错1短3短1短内存通道刷新错误1短3短2短基本内存出错(内存损坏或RAS设置错误)1短3短3短基本内存出错(DIMM插槽上的内存损坏)1短4短1短基本内存某一地址出错1短4短2短系统基本内存有奇偶校验错误1短4短3短EISA总线时序器错误1短4短4短EISA NMI口错误2短1短1短系统基本内存检查失败3短1短1短第一个DMA控制器或寄存器出错3短1短2短第二个DMA控制器或寄存器出错3短1短3短主中断处理寄存器错误3短1短4短副中断处理寄存器错误3短2短4短键盘时钟器有问题3短3短4短显卡RAM出错3短4短2短显示器数据线松动,显卡未插稳或已损坏3短4短3短未发现显卡的ROM BIOS4短2短1短系统实时时钟错误4短2短2短系统启动错误,CMOS设置不当或BIOS损坏4短2短3短键盘控制器(8042)中的GateA20开关有错,BIOS不能切换到保护模式4短2短4短保护模式中断错误4短3短1短内存错误(内存损坏或RAS设置有误)4短3短3短系统第二时钟错误4短3短4短实时时钟错误4短4短1短串口错误4短4短2短并口错误4短4短3短数学协处理器出错。

联想主板BIOS设置

联想主板BIOS设置

∙尝试建议:开机-- 一般按del 进入bios查看。

bios shadowed (bios映射分为系统bios映射、视频bios映射、还有视频内存缓冲!)将video bios shadow设为enabled。

使显卡上的bios映射到内存中,提高显示速度。

将system bios shadow设为enabled。

使系统bios映射内存中,改善性能。

将video bios cacheable设为enable。

使显卡上的bios映射到高速缓存。

将system bios cacheable设为enbaled。

使主板的bios映射到高速缓存。

一般在主选单advanced bios features 回车进入即可找到。

当然有的主板bios这项目,不在这里面。

也有可能在integrated peripherals 整体周边设定中找到。

用键盘 pagedown 调整为 enabled表示开启反之 disabled表示关闭。

调整完毕按键盘f10键保存退出、重启动电脑即可。

system bios shadow和system bios cacheable这两个系统中通常很少使用到此功能,所以没必要调整开启映射。

若想尝试一下也未尝不可,若开启后导致系统功能异常或冲突,则关闭此映射功能。

video bios shadow和video bios cacheable这两个经过在较差配置的机器上设置开启使用后、感觉到有明显的改善、建议可以开启。

∙添加评论∙2010-01-08 22:33∙联想家悦电脑BIOS是如何设置的?∙Advanced Bios Features,进入bios后第二选项,应该是“B IOS FEATURES SETUP"。

Advanced BIOS Features(高级BIOS设置)在这一个选项中,我只着重讲解一些最重要的选项,其他的选项,我们在BIOS高级设置中具体讲解。

①Virus Warning:病毒报警选项设置,设定值有Disabled(不可以)和Enabled(可以)。

内存管理与保护模式

内存管理与保护模式

内存管理与保护模式本实验讨论x86采用的内存管理模式:从分段实模式到分段保护模式,再到分页虚拟内存管理,并介绍进入保护模式、启动分页机制、以及获取内存大小的基本方法。

1 x86的内存管理内存的分段(segmentation)管理符合程序的逻辑结构,利于程序的保护和动态控制。

分页(paging)则最适合虚拟内存的管理需要。

目前主流操作系统的内存管理采用的是分页方法(如类Unix),也有采用段页式的(如Wiondows)。

Intel 8086支持不带保护功能的分段内存管理,80286开始引入带保护功能的分段内存管理,80386又引入了支持虚拟内存的分页内存管理,但其分页是建立在分段基础上的。

IA-32和x64处理器,都支持段页式内存管理。

1.1 实模式Intel的16位处理器8086,采用的是分段内存管理,CPU中有CS、DS、SS和ES四个16位段寄存器,作为基地址,分别用于生成代码、数据、堆栈和其他段的物理地址:20位物理地址= 16位段寄存器值*16(或左移4位)+ 16位偏移量寻址空间只有(220=)1MB,最大段长为(216=)64KB。

因为这样的CPU只能生成和访问真实的物理内存地址,所以被称为实地址模式(real-address mode),简称为实模式(real mode)。

不过这种分段方法并不是现代的分段技术,没有提供任何内存保护功能,不能阻止内存的越界访问。

而且8086 CPU也没有提供任何特权分级,谁都可以任意改变CS、DS和SS 寄存器中的值,从而可以执行/访问内存任何地址的指令/数据,完全没有安全可言。

因此在8086 CPU上,是不可能构建现代操作系统的。

1.2 保护模式1982年推出的16位的80286处理器,在x86体系中首次引入了(分段式的)内存保护机制,称之为保护模式(protected mode)。

不过80286的保护模式只支持24位的地址空间(最多只能访问16MB内存)和16位的界限大小(最大段长为216=64KB或216+8=224=16MB),且只能从实模式进入保护模式,而不能从保护模式返回实模式。

【台式机bios故障】dell台式机bios设置

【台式机bios故障】dell台式机bios设置

【台式机bios故障】dell台式机bios设置虽然BIOS是修复系统,处理故障的,但是bios本身也是会出现故障的,下面小编就教大家台式机bios故障了怎么处理。

台式机bios故障处理方法1.开机后按Delete键无法进入BIOS设置画面故障现象:笔记本电脑在启动过程中,按下Delete键无法进入到BIOS设置画面,为什么?如何进入到BIOS设置画面?故障处理:绝大多数的台式机都是通过按Delete键进入BIOS设置画面的,很多由台式机过渡到笔记本电脑的用户往往会想当然地认为笔记本电脑也是按Delete键进入到BIOS 设置的,殊不知笔记本BIOS与台式机有很大的差异。

尽管笔记本电脑与台式机一样,也用BIOS来为操作系统和硬件提供底层的信息,但是笔记本电脑的BIOS和台式机的BIOS又有很大的不同,台式机主要是采用Award和AMI BIOS,而笔记本电脑则大多采用Phoenix BIOS,当然也有一些笔记本电脑厂家采用改版的Phoenix笔记本电脑开机按F2进入BIOS 或是自行开发的BIOS,例如Toshiba(东芝)和Dell(戴尔)等公司。

采用Phoenix BIOS的笔记本电脑几乎全部采用F2键作为进入BIOS画面的热键, 与台式机经常采用的Delete键有明显不同。

另外,各大笔记本厂商进入BIOS的方法也会略有不同,下面为大家介绍一下典型笔记本电脑进入BIOS设置的方法。

IBM,启动时按F1键;HP,启动时按F2键;SONY,启动时按F2键;Dell,启动时按F2键;Acer,启动时按F2键;Toshiba,启动时按ESC然后按F1键;Compaq,启动时按F10键;Fujitsu,启动时按F2键;还有一些品牌笔记本电脑,启动时按F2键;故障点评:笔记本电脑进入BIOS与台式机有明显不同,如果用户购置的是其他牌号的笔记本电脑又不清楚进入BIOS的方法,那么,只需一一试一下[F1]、[F2]、[F10]、[CTRL+ALT+ESC]等功能键或组合键,肯定有一种可以进入到BIOS。

A20地址线问题

A20地址线问题

很多稀奇古怪的东西都是由于系统升级时,为了保持向下兼容而产生的,A20 Gate就是其中之一。

在8086/8088中,只有20根地址总线,所以可以访问的地址是2^20=1M,但由于8086/8088是16位地址模式,能够表示的地址范围是0-64K,所以为了在8086/8088下能够访问1M内存,Intel采取了分段的模式:16位段基地址:16位偏移。

其绝对地址计算方法为:16位基地址左移4位+16位偏移=20位地址。

但这种方式引起了新的问题,通过上述分段模式,能够表示的最大内存为:FFFFh:FFFFh=FFFF0h+FFFFh=10FFEFh=1M+64K-16Bytes(1M多余出来的部分被称做高端内存区HMA)。

但8086/8088只有20位地址线,如果访问100000h~10FFEFh之间的内存,则必须有第21根地址线。

所以当程序员给出超过1M(100000H-10FFEFH)的地址时,系统并不认为其访问越界而产生异常,而是自动从重新0开始计算,也就是说系统计算实际地址的时候是按照对1M求模的方式进行的,这种技术被称为wrap-around。

到了80286,系统的地址总线发展为24根,这样能够访问的内存可以达到2^24=16M。

Intel 在设计80286时提出的目标是,在实模式下,系统所表现的行为应该和8086/8088所表现的完全一样,也就是说,在实模式下,80286以及后续系列,应该和8086/8088完全兼容。

但最终,80286芯片却存在一个BUG:如果程序员访问100000H-10FFEFH之间的内存,系统将实际访问这块内存,而不是象过去一样重新从0开始。

为了解决上述问题,IBM使用键盘控制器上剩余的一些输出线来管理第21根地址线(从0开始数是第20根),被称为A20 Gate:如果A20 Gate被打开,则当程序员给出100000H-10FFEFH之间的地址的时候,系统将真正访问这块内存区域;如果A20 Gate被禁止,则当程序员给出100000H-10FFEFH之间的地址的时候,系统仍然使用8086/8088的方式。

CPU Interface信号说明

CPU Interface信号说明

第二节CPU Interface讯号说明(1).A20GATE A20M#(2).RCIN# INIT# RESET(3).FERR# IGNNE#(4).SMI# SMIACT#(5).INTR NMIHub Interface说明Firmware Hub讯号说明:FWH[3:0]FWH[4]A20GATE(A20 GATE)SuperI/O的port92缓存器中,SGA20 bit若设为1,则A20GATE 输出为High,若设为0,则A20GATE输出为Low。

A20M#(Mask A20地址位20遮蔽)A20M#讯号是由ICH输出至CPU的讯号。

此讯号是让CPU 在Real Mode(真实模式)时仿真8086只有1M Byte(1兆字节)地址空间,当超过1Mbyte地址空间时A20M#为LOW,A20被驱动为0而使地址自动折返到第一个1M Byte地址空间上。

RCIN#(Keyboard Controller Reset Processor键盘控制重置CPU) RCIN#讯号是由SuperI/O输出至ICH。

键盘控制SuperI/O产生RCIN#讯号至ICH,经由ICH再输出INIT#讯号至CPU,进而达到重置CPU的目的。

INIT(Initialization启始)为一由ICH输出至CPU的讯号,与RESET功能上非常类似,但与RESET不同的是CPU内部L1 Cache和浮点运算操作状态并没被无效化。

但TLB(地址转换参考缓存器)与BTB(分歧地址缓存器)内数据则被无效化了。

INIT另一点与RESET不同的是CPU必须等到在指令与指令之间的空档才会被确认,而使CPU进入启始状态。

RESET(重置)当RESET为”HIGH”时CPU内部被重置到一个已知的状态并且开始从地址OFFFFFFFOH读取重置后的第一个指令。

CPU 内部的TLB(地址转换参考缓存器)、BTB(分歧地址缓存器)以及SDC(区段地址转换高速缓存)当重置发生时内部数据全部都变成无效。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Gate A20与保护模式大家都知道,8088/8086只有20位地址线,按理它的寻址空间是2^20,应该是1024KB,但PC机的寻址结构是segment:offset,segment和offset都是16位的寄存器,最大值是0ffffh,换算成物理地址的计算方法是把segment左移4位,再加上offset,所以segment:offset所能表达的寻址空间最大应为0ffff0h +0ffffh = 10ffefh(前面的0ffffh是segment=0ffffh并向左移动4位的结果,后面的0ffffh是可能的最大offset),这个计算出的10ffefh是多大呢?大约是1088KB,就是说,segment:offset的地址表达能力,超过了20位地址线的物理寻址能力,你说这是不是有点麻烦。

在早先,由于所有的机器都没有那么大的内存,加上地址线只有20位,所以当你用segment:offset的方式企图寻址100000h这个地址时,由于没有实际的第21位地址线,你实际寻址的内存是00000h的位置,如果你企图寻址100001h这个地址时,你实际得到的内容是地址00001h上的内容,所以这个事对实际使用几乎没有任何影响,但是后来就不行了,出现了80286,地址线达到了24位,使segment:offset寻址100000h--10ffefh这将近64K的存储器成为可能,为了保持向下兼容,于是出现了A20 Gate,这是后话,我们后面再细说。

我们可能经常听到一些只有在PC机上才有的一些关于存储器的专有名词,包括:常规内存(Conventional Memory)、上位内存区(Upper Memory Area)、高端内存区(High Memory Area)和扩展内存(Extended Memory),我尽量把这几个东东说明白,这需要下面这张著名的图。

这张图很清楚地说明了问题,大家都知道,DOS下的“常规内存”只有640K,这640K就是从0--A0000H这段地址空间;所谓“上位内存区”,指的就是20位地址线所能寻址到的1M地址空间的上面384K空间,就是从A0001H--100000H 这段地址空间,也就是我们说的用于ROM和系统设备的地址区域,这384K空间和常规内存的640K空间加起来就是20位地址线所能寻址的完整空间1024KB;由于80286和80386的出现使PC机的地址线从20位变成24位又变成32位,寻址能力极大地增加,1M以上的内存寻址空间,我们统称为“扩展内存”;这里面绝大部分内存区域只能在保护模式下才能寻址到,但有一部分既可以在保护模式下,也可以在实模式下寻址,这就是我们前面提到过的地址100000h--10ffefh之间的这块内存,为了表明其特殊性,我们把这块有趣的内存区叫做“高端内存”。

前面我们提过由于IBM的愚蠢设计给PC机的内存结构埋下了麻烦的伏笔,现在我们来说说这个麻烦。

我们都见过PC机上的内存条,但是由于上位内存区的存在,这个内存条上的地址居然不能连续,就是说,这个内存条上要有0--A0000H的地址空间,还要有100000h--最大内存容量的地址空间,中间的384K 地址空间必须留出来给ROM用,在现如今一个芯片就好几兆的情况下,你说这个内存条应该怎么做,当然我相信一定是可以做出来的,但肯定很麻烦,如果当初IBM把这个“上位内存区”放在地址低端,就是0--6000h这一部分,岂不是这个麻烦就没有了?!但是,实际的内存条上地址都是连续的,并没有人把这段地址空间留出来给ROM使用,原因很简单,采用技术手段把这段地址空间空出来,比浪费这384K 内存的成本还要高,所以在这个地址区域就出现了很奇怪的现象,ROM和RAM 的地址重叠。

实际上,往往ROM并不能完全覆盖整个384K区域,这样就会有一些地址没有被ROM占用,那么这部分地址上的RAM仍然是可以使用的。

实际上,和ROM重叠的这384K RAM一般也不会被浪费,说到这里,不得不说所谓的ROM Shadowing了,RAM和ROM的性能是有很大差异的,RAM的存取速度要远远大于ROM,而且RAM可以32位存取,ROM通常只能16位,所以目前的PC机对这块RAM和ROM重叠的区域的处理采用一种ROM Shadowing 的技术方式,当机器加电后,先让ROM有效,RAM无效,然后读出ROM内容,再让ROM无效,RAM有效,把读出的ROM内容放到相同地址的RAM中,并把相应位置的RAM设定为只读,这样就把ROM搬到了RAM中,地址完全一样,只是性能比使用ROM要高些,这块RAM就好像ROM的Shadow一样。

回到我们的主题A20 Gate,出现80286以后,为了保持和8086的兼容,PC 机在设计上在第21条地址线(也就是A20)上做了一个开关,当这个开关打开时,这条地址线和其它地址线一样可以使用,当这个开关关闭时,第21条地址线(A20)恒为0,这个开关就叫做A20 Gate,很显然,在实模式下要访问高端内存区,这个开关必须打开,在保护模式下,由于使用32位地址线,如果A20恒等于0,那么系统只能访问奇数兆的内存,即只能访问0--1M、2-3M、4-5M......,这显然是不行的,所以在保护模式下,这个开关也必须打开。

下面我们来看一下PC机是怎么实现A20 Gate的。

早期的PC机,控制键盘有一个单独的单片机8042,现如今这个芯片已经给集成到了其它大片子中,但其功能和使用方法还是一样,当PC机刚刚出现A20 Gate的时候,估计实在找不到控制它的地方了,同时为这点小事也不值得增加芯片,于是工程师使用这个8042键盘控制器来控制A20 Gate,但A20 Gate 真的和键盘一点关系也没有,我们先从软件的角度简单介绍一下8042这个芯片。

8042有4个寄存器•1个8-bit长的Input buffer;Write-Only;•1个8-bit长的Output buffer;Read-Only;•1个8-bit长的Status Register;Read-Only;•1个8-bit长的Control Register;Read/Write。

有两个端口地址:60h和64h。

•读60h端口,读output buffer•写60h端口,写input buffer•读64h端口,读Status Register对Control Register的操作相对要复杂一些,首先要向64h端口写一个命令(20h为读命令,60h为写命令),然后根据命令从60h端口读出Control Register 的数据或者向60h端口写入Control Register的数据(64h端口还可以接受许多其它的命令)。

先来看看Status Register的定义,我们后面要用bit 0和bit 1:bit meaning-----------------------------------------------------------------------0 output register (60h) 中有数据1 input register (60h/64h) 有数据2 系统标志(上电复位后被置为0)3 data in input register is command (1) or data (0)4 1=keyboard enabled, 0=keyboard disabled (via switch)5 1=transmit timeout (data transmit not complete)6 1=receive timeout (data transmit not complete)7 1=even parity rec'd, 0=odd parity rec'd (should be odd)除了这些资源外,8042还有3个内部端口:Input Port、Outport Port和Test Port,这三个端口的操作都是通过向64h发送命令,然后在60h进行读写的方式完成,其中本文要操作的A20 Gate被定义在Output Port的bit 1上,所以我们有必要对Outport Port的操作及端口定义做一个说明。

•读Output Port向64h发送0d0h命令,然后从60h读取Output Port的内容•写Output Port向64h发送0d1h命令,然后向60h写入Output Port的数据另外我们还应该介绍两个命令:•禁止键盘操作命令向64h发送0adh•打开键盘操作命令向64h发送0aeh有了这些命令和知识,我们可以考虑操作A20 Gate了,有关8042芯片更详细的资料,请参考该芯片的Data Sheet。

如何打开和关闭A20 Gate。

理论上讲,我们只要操作8042芯片的输出端口(64h)的bit 1,就可以控制A20 Gate,但实际上,当你准备向8042的输入缓冲区里写数据时,可能里面还有其它数据没有处理,所以,我们要首先禁止键盘操作,同时等待数据缓冲区中没有数据以后,才能真正地去操作8042打开或者关闭A20 Gate。

打开A20 Gate 的具体步骤大致如下:1.关闭中断;2.等待8042 Input buffer为空;3.发送禁止键盘操作命令;4.等待8042 Input buffer为空;5.发送读取8042 Output Port命令;6.等待8042 Output buffer有数据;7.读取8042 Output buffer,并保存得到的字节;8.等待8042 Input buffer为空;9.发送Write 8042 Output Port命令到8042 Input buffer;10.等待8042 Input buffer为空;11.将从8042 Output Port得到的字节的第2位置1(或清0),然后写入8042 Input buffer;12.等待,直到8042 Input buffer为空为止;13.发送允许键盘操作命令到8042 Input buffer;14. 打开中断。

下面是完成打开A20 Gate的代码:A20Enable:cli ;1.关闭中断call WaitInbufEmpty ;2.等待8042 Input buffer为空;mov al, 0adhmov dx, 64hout dx, al ;3.发送禁止键盘操作命令call WaitInbufEmpty ;4.等待8042 Input buffer为空;mov al, 0d0hmov dx, 64hout dx, al ;5.发送读取8042 Output Port命令;call WaitOutbufFull ;6.等待8042 Output buffer有数据;mov dx, 60hin al, dx ;7.读取8042 Output bufferpush ax ;保存读取的数据call WaitInbufEmpty ;8.等待8042 Input buffer为空;mov al, 0d1hmov dx, 64hout dx, al ;9.发送写8042 Output Port命令call WaitInbufEmpty ;10.等待8042 Input buffer为空pop axor al, 02h ;11.将从8042 Output Port得到的字节的bit 1置1mov dx, 60hout dx, al ;写入Output Portcall WaitInbufEmpty ;12.等待8042 Input buffer为空mov al, 0aehmov dx, 64hout dx, al ;13.发送允许键盘操作命令sti ;开中断retWaitInbufEmpty:mov dx, 64hin al, dx ;读取Status Registertest al, 02hjnz WaitInbufEmptyretWaitOutbufFull:mov dx, 64hin al, dxtest al, 01 ;读取Status Registerjz WaitOutbufFullret后来,由于感觉使用8042控制A20运行太慢了(确实,那么长的代码,中间还要若干次的wait),所以后来又出现了所谓的Fast A20,实际上,现在的大多数机器都是Fast A20,Fast A20使用92h端口控制A20,同时BIOS里提供了一个软中断来控制A20:入口:ah=24hal=0 关闭A201 打开A202 读取A20状态int 15h返回:如果BIOS支持此功能,CF=0,否则CF=1CF=0时,AX返回当前A20状态,1=打开,0=关闭像8042中的Output Port中的定义一样,92h端口的bit 1控制着A20,为1时打开,为0时关闭,从92h中读一个byte可以看a20的当前状态,所以对92h 的操作如下:•读A20状态mov dx, 92hin al, dx如果al的bit 1为1表示a20打开,否则为0•打开A20mov dx, 92hmov al, 02out dx, al•关闭A20mov dx, 92hmov al, 0out dx, al特别要注意的是,大家从这篇文章的文字中可能也能感觉到,A20 Gate的设计本身就让人感觉很别扭,不是那么流畅,所以和A20有关的事情就难免也会有相同的感觉,很奇怪的是,上面介绍的三种方法并不是在每台机器上都适用,所以如果你要做一个商业软件其中要操作A20,那一定要三种方式联合使用才比较稳妥,否则会有意想不到的结果,LINUX公开的启动代码中就是这么做的在DOS下有时我们会在config.sys中写上一句:dos=high,这句就会把驻留的DOS放到高端内存区域去,怎么放的呢?关键点就是打开A20,然后把DOS 从常规内存搬到100000h起始的区域去,并把在常规内存中占用的内存释放掉,当然说起来容易,实际做的时候还有很多细节要处理。

相关文档
最新文档