Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1024348
  • 博文数量: 238
  • 博客积分: 2842
  • 博客等级: 少校
  • 技术积分: 2765
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-16 00:20
个人简介

stdlf

文章分类

全部博文(238)

文章存档

2013年(6)

2012年(13)

2011年(82)

2010年(89)

2009年(48)

我的朋友

分类: 服务器与存储

2011-08-24 13:43:51

A20 Gate v.s A20 Mask

前面文章中有提到A20的一些相關資訊,這邊我就畫一張圖來描述清楚一些概念。

對於圖中我們要區分的是A20 GateA20 Mask這兩種不同名詞分別所代表的意義為何。

以下是我自己畫的圖:


這邊描述幾個相關的硬體介面電路所代表的意義: 上圖中可以看到有一個A20 Gate (OR 邏輯匣),他分別有兩支source pin,分別連接到南僑與KBC,且分別由Port 92hKBC控制狀態,另外還有一支輸出pin連接到CPUA20 Mask接腳。

A20M #
的由來: The Intel 80486 added a special pin named A20M#, which when asserted low forces bit 20 of the physical address to be zero for all on-chip cache or external memory accesses. 看的出來從80486後就改成CPU自己搞....XD

A20 Gate:
一個可以用軟體控制的邏輯匣(AND/OR)...以前A20 gate 輸出腳是接到A20位址線(AND匣,其中一支src pin是接到KBC),後來改接到如上圖的 CPU A20M# 後變成OR (這邊我不確定是否正確,因為我來不及參與過去^^)

A20 Gate
只針對A20有影響,對於其他的A21~A31都沒影響。

補充資料:

我曾經看過某個EC Datasheet,裡面有提到有關Port 92h的相關敘述,由於我並不是EC Engineer ,所以只能想像一下可能的實體電路圖:

 

這張圖裡面的重點在於EC本身也支援Port 92h功能,也就是說可以設定南橋把Port 92h cycleEC(選擇使用ECPort 92h,此時南橋的Port 92h就失去功效),而EC內有一些組態暫存器,其中有一個是用來控制是否要開啟Port 92h功能,簡單說就是你可以選擇要使用ICH/EC 所提供的Port 92h功能,而使用ECPort 92h功能時你就必須去設定ICH組態暫存器以及把EC內的Port92_EN_bit 打開。

如果你選擇EC內的Port 92h功能時,從圖中可以看見EC內部也有一個A20 Gate,而他的Source pin是跟KBC電路連接在一起,所以控制的方式會如同我前面畫的那張圖ㄧ樣的控制方式。

這部分補充資料是我自己想像所畫出來的圖,實際的電路圖還是要EC Engineer才能夠回答,所以僅供大家參考一下。

Reference

維基百科

Harrison Hsieh

4 意見:

newcome 提到...

Harrison, cpuA20M#这个pin的状态power on或者reset时候的default状态是什么?CPU刚一上电的时候这个A20#是否会影响CPU的取指?如果A20M default active,那么是不是上电时候CPU没法正确去0fffffff0h处取得第一条指令啊,因为address bit 20会受A20M#影响而为0啊?我对这边一直比较疑惑,希望Harrison能帮忙解答,多谢!

七月 06, 2008 5:26 上午

Harrison 提到...

不同的SB可能會不同,而我知道的是:

1.CPU Reset
= 看你的A20 Gate設定
2.
power on = High
3.S1 = High
4.S3 =
沒訊號
5.S4/S5 =
沒訊號

希望對你有幫助!

七月 08, 2008 6:25 下午

匿名提到...

A20 Mask的問題應該發生在從80286開始..CPU address line expand to 24 bit, but the CPU couldn't do the wraparound...所以需要把A20 disable for 8086 program..

四月 10, 2009 8:17 下午

匿名提到...

"2.power on = High"
这个是由什么决定的呢?CPU硬件决定的吗?
那么什么时候A20会变成High

 

 

很多剛入行的朋友問我A20開關的知識,我這邊就整理一下相關資訊,讓大家查閱的時候可以有個參考。

首先先說明相關的CPU的工作模式:在目前x86下面工作模式與A20有關的就是保護模式跟真實模式。

真實模式下,它允許定址到1MB記憶體,所以超過1MB的位址(FFFFFh)要繞回去00000h這就是所謂的回繞

保護模式下則分不同時間點來談,80286 時,位址線增加到24 pin,所以可以定址到16M,而為了向下相容,所以設計了一個開關A20 Switch來控制A20~A23A20=0時,強制把位址線歸零,當A20=1時,可進位

後來因為這個開關要Reset才能回復狀態,因此出現一個新的問題就是進入保護模式後,要重新開機才能回到真實模式。

於是有人就想說找一個設備,然後控制這個設備就可以做A20的開與關,因此找上了8042 KBC,所以以後開關A20 Switch時,只要去設定8042就可以了,因此解決了每次回真實模式都要重新開機的問題。

後來80386 之後,CPU的設計可以直接從保護模式切換回去真實模式,但是為了向下相容,所以還是一值保留這個設計。

慢慢的這個留下來的設計又出現新的問題,x86設計師可能想說每次都透過8042去開關速度有點慢,因此後來又提出了Fast A20 的設計,簡單說就是透過Port 92h 直接設定A20 switch開關。

至於這個被保留下來的設計,還有沒有當初的功能我也沒去測試,不過已經變成一種習慣,就是進入保護模式要去開關A20 switch

以上大致上就是x86對於 A20的歷史,有興趣的人可以多去找找ㄧ些資料來看,或是做做小實驗,看看A20 switch不開的時候,會發生什麼事情 ^^.

Harrison Hsieh

3 意見:

提到...

您好,小弟我有買了一本跟BIOS相關的書,上面對於A20有著這樣的敘述:
如果以seg=FFFFh,offset0010h~0fffh來定址,最大能表示的記憶體區域是FFFF:0010~FFFF:FFFFh,記憶體空間超過20條定址線的表示,變成從100000h~10FFEFh(1088k扣除16bytes的空間)
以上就是這本書的局部內容,最主要的疑點來自最後一句話100000h~10FFEFh明明不到100k,哪來的1088k?為何又要扣16bytes?是我誤解了什麼嗎?

二月 21, 2008 11:00 上午

匿名提到...

想問一下在BIOS選項Gate A20 Option設定FASTNORMAL會有什麼差別嗎?以現在的電腦而言看的出來會有什麼變化嗎?
最近再煩惱這個function

謝謝

二月 23, 2008 9:00 上午

Harrison 提到...

>100000h~10FFEFh
當時的cpu最大定址範圍是到10FFEFh
而多出來的部分你自己計算一下FFEFh=65519 (64k65535,64k少了16),所以表示成最大定址範圍為1M+(64k-16),但是你如果把10FFEFh直接換算10進制在除1024的話就會變成1087.xxk 1088k,不過應該沒有人會這樣算,你那本書名可以說一下嗎? 還真的是很好奇作者是誰?

另外要提的是當時的位址線只有1M,所以就算多出了FFEFh你也沒辦法用,而且他也沒打算讓你用,所以就用回繞技術了!

>BIOS
選項Gate A20 Option設定FASTNORMAL會有什麼差別嗎?

我沒去追過這部分的bios code,而且各家bios做法不同,不過單純依照字面上翻譯應該只是決定Fast 92h Port/KBC二擇一來控制A20,其結果應該是一樣的,只是選擇誰來控制而已!

二月 24, 2008 8:51 上午

 

阅读(1521) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~