stdlf
分类: 服务器与存储
2011-08-24 13:43:51
前面文章中有提到A20的一些相關資訊,這邊我就畫一張圖來描述清楚一些概念。
對於圖中我們要區分的是A20 Gate與A20 Mask這兩種不同名詞分別所代表的意義為何。
以下是我自己畫的圖:
這邊描述幾個相關的硬體介面電路所代表的意義: 上圖中可以看到有一個A20 Gate (OR 邏輯匣),他分別有兩支source pin,分別連接到南僑與KBC,且分別由Port 92h與KBC控制狀態,另外還有一支輸出pin連接到CPU的A20 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
cycle往EC送(選擇使用EC的Port 92h,此時南橋的Port 92h就失去功效),而EC內有一些組態暫存器,其中有一個是用來控制是否要開啟Port 92h功能,簡單說就是你可以選擇要使用ICH/EC 所提供的Port 92h功能,而使用EC的Port 92h功能時你就必須去設定ICH組態暫存器以及把EC內的Port92_EN_bit 打開。
如果你選擇EC內的Port 92h功能時,從圖中可以看見EC內部也有一個A20 Gate,而他的Source pin是跟KBC電路連接在一起,所以控制的方式會如同我前面畫的那張圖ㄧ樣的控制方式。
這部分補充資料是我自己想像所畫出來的圖,實際的電路圖還是要EC Engineer才能夠回答,所以僅供大家參考一下。
Reference
維基百科
標籤: IA32 相關基礎知識
4 意見:
newcome 提到...
Harrison, cpu端A20M#这个pin的状态power on或者reset时候的default状态是什么?CPU刚一上电的时候这个A20#是否会影响CPU的取指?如果A20M# default 是active,那么是不是上电时候CPU没法正确去0fffffff0h处取得第一条指令啊,因为address bit 20会受A20M#影响而为0啊?我对这边一直比较疑惑,希望Harrison能帮忙解答,多谢!
Harrison 提到...
不同的SB可能會不同,而我知道的是:
1.CPU Reset時 = 看你的A20 Gate設定
2.在power on =
High
3.S1 = High
4.S3 = 沒訊號
5.S4/S5 = 沒訊號
希望對你有幫助!
匿名提到...
A20 Mask的問題應該發生在從80286開始..當CPU address line expand to 24 bit, but the CPU couldn't do the wraparound...所以需要把A20 disable for 8086 program..
匿名提到...
"2.在power on = High"
这个是由什么决定的呢?CPU硬件决定的吗?
那么什么时候A20会变成High?
很多剛入行的朋友問我A20開關的知識,我這邊就整理一下相關資訊,讓大家查閱的時候可以有個參考。
首先先說明相關的CPU的工作模式:在目前x86下面工作模式與A20有關的就是保護模式跟真實模式。
真實模式下,它允許定址到1MB記憶體,所以超過1MB的位址(FFFFFh)要繞回去00000h,這就是所謂的回繞。
保護模式下則分不同時間點來談,在80286 時,位址線增加到24 pin,所以可以定址到16M,而為了向下相容,所以設計了一個開關A20 Switch來控制A20~A23,當A20=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不開的時候,會發生什麼事情 ^^.
標籤: IA32 相關基礎知識
3 意見:白 提到...
您好,小弟我有買了一本跟BIOS相關的書,上面對於A20有著這樣的敘述:
如果以seg=FFFFh,offset從0010h~0fffh來定址,最大能表示的記憶體區域是FFFF:0010~FFFF:FFFFh,記憶體空間超過20條定址線的表示,變成從100000h~10FFEFh(約1088k扣除16個bytes的空間)
以上就是這本書的局部內容,最主要的疑點來自最後一句話100000h~10FFEFh明明不到100k,哪來的1088k?為何又要扣16bytes?是我誤解了什麼嗎?
匿名提到...
想問一下在BIOS選項Gate A20 Option設定FAST或NORMAL會有什麼差別嗎?以現在的電腦而言看的出來會有什麼變化嗎?
最近再煩惱這個function
謝謝
Harrison 提到...
>100000h~10FFEFh
當時的cpu最大定址範圍是到10FFEFh
而多出來的部分你自己計算一下FFEFh=65519
(64k是65535,比64k少了16),所以表示成最大定址範圍為1M+(64k-16),但是你如果把10FFEFh直接換算10進制在除1024的話就會變成1087.xxk 約1088k,不過應該沒有人會這樣算,你那本書名可以說一下嗎? 還真的是很好奇作者是誰?
另外要提的是當時的位址線只有1M,所以就算多出了FFEFh你也沒辦法用,而且他也沒打算讓你用,所以就用回繞技術了!
>BIOS選項Gate A20
Option設定FAST或NORMAL會有什麼差別嗎?
我沒去追過這部分的bios code,而且各家bios做法不同,不過單純依照字面上翻譯應該只是決定Fast 92h
Port/KBC二擇一來控制A20,其結果應該是一樣的,只是選擇誰來控制而已!