小華的部落格
Google
 

星期三, 二月 15, 2012

Turbo C 不能在64 bit的Windows下執行 (won't work in Windows 64-bit)



由於工作上的需要,偶爾還是會去寫一些DOS的工具,所以常常會遇到比較新版的OS就無法向下相容一些軟體的問題! 像是Turbo C 3.0 就沒辦法在64 bit OS下執行,執行時你會看到上面圖片中的警告訊息。

而市面上也有一些軟體就是針對這些問題去解決,像是DOSBOX就是個模擬器,可以讓你在64 bit OS中去模擬DOS的環境。

使用方式很簡單,在安裝好DOSBOX for 64 bit軟體後直接點兩下執行他,接著要使用MOUNT指令先建立一個磁碟機,例如我的TurboC 3.0是放在E:\TCC30

指令的格式 : mount [隨便的磁碟機]  [你要映對的路徑]
所以我鍵入 mount e:  e:\

接著我就可以切換磁碟機到e: 然後進入我的tcc30的目錄中執行Turbo C.


很簡單吧~ 這個工具的下載位置在下面的連結!
下載 DOSBOX for 64 bit

星期三, 二月 01, 2012

Win7磁碟分割

如果你拿到了一台NB,裡面安裝的Image只有一個硬碟分割區,但是你又想要多分割幾個區域,你會怎麼辦?

1.Ghost/備份原來的磁區,然後重新分割後再還原?
2.使用市面上的分割軟體分割?

其實Win7已經有內建分割功能,只要透過磁碟管理工具選擇你原來的C磁碟機,然後選擇【壓縮磁碟區】把空間釋放出來就可以了,底下的圖示中就可以看到輸入你要壓縮的空間(釋放出來的大小給另一個磁碟使用),很方便吧!

星期二, 一月 31, 2012

重新安裝Chrome後要求輸入加密通關密語

如果大家在重新安裝Chrome之後,要求你要輸入加密通關密語,這是方便保護你的雲端資料的一種方式。

大家可以在Chrome內設定,如果你沒有設定過的密碼的話,他的預設加密通關密語就是跟你的Gmail登入時的密碼是同一個!

星期三, 一月 25, 2012

心得分享: 學習UEFI 之你把C語言學好了嗎?!

很多人在問我說: 小華要怎樣子把UEFI 學好?! 其實寫BIOS的人答案應該只有一個,把SPEC看懂看完然後融會貫通! 這樣子的答案好像有跟沒有是一樣的!

小弟就以我的學習經驗來分享給大家吧!(雖然我也沒學好,但是教學相長啦~)

首先呢你要會C語言,不是C++喔! 因為目前UEFI還是使用C語言開發,其中最主要的原因是因為C的code size會比較小一點,會比較適合Firmware的開發!

學C語言的時候要注意甚麼是#define ? #define 高級用法有哪些?! 甚麼是typedef,這東西跟UEFI 的關係是甚麼? 為什麼UEFI 中是使用UINT32? 而不是一般的unsigned int ? 還有甚麼是function pointer? 這要如何使用與宣告?! 另外就是Link List再處理資料結構時的應用!

大致上C的應用學會,UEFI的code大概就看得懂! 當你看得懂的時候,再去看SPEC就會更瞭解人家在做甚麼了! (記住我的話 : 工欲善其事必先利其器,先把C學好,你才能做更多的事情!)

接下來你要會一些些MASM組合語言,因為在除錯(debug)時多少都要看得懂! 如果時間夠多就去修一下微處理器架構,順便了解一下CPU是如何設計出來的,他對於指令的提取/解碼又是甚麼動作? 甚麼是指令被優化? 他跟CPU的關係是甚麼/組語的Library是怎麼回事?組合語言呼叫C語言是如何呼叫的? 16 bit vs 32 bit vs 64 bit 又有何差別?segment 跟記憶體管理又是甚麼關係? ...etc 這些相關知識如果能懂的話會更好!

然後就是X86的一些架構性的知識,像是中斷是甚麼?! 中斷的種類有幾種?! 為什麼要有中斷?! 中斷跟OS還有CPU之間是怎麼配合的?! 設備的中斷跟CPU的中斷的差別是甚麼? 個別的運作原理又是甚麼? 另外像是甚麼是CPU工作模式(真實模式/保護模式/SMM...etc)/定址又是甚麼東西?!

還有像是PCI bus/SATA/SMBIOS/ACPI....相關的知識都必須要知道,更深入的就會去瞭解到CPU是如何初始化?! Chipset初始化? Memory sizing? 不過這些知識都比較被保護住,所以非相關產業應該得不到這些資訊! 所以先把架構性學好,等待有機會在更深入研究!

綜合上述所說,要學的東西還真的很多! 學BIOS不可能一蹴即成! 往往都需要時間慢慢累積! 但是現在UEFI的入門門檻已經變很低了,只要懂C 在加上遇到好的老師(我在鳳凰科技遇到一個C語言活字典Timothy)或學長,一般大概一年就能獨立接案子! 其他的就是靠自己努力!

還記得我在鳳凰科技的時候有個資深學長(Joe)曾說過一句名言: 我只有一年的BIOS經驗重複了10幾年而已! 所以就是一直重複累積更多的知識與經驗啦!

星期四, 一月 19, 2012

~鳳凰科技~

今天是中國兔年最後一天上班日,也是我在鳳凰科技的最後一天上班日!

感謝過去這幾年同事在BIOS上或是生活上的互相幫忙、還有主管的提攜以及我的Team member的情義相挺!

謝謝你們大家,才能讓我留下了那麼多美好的回憶!!!

-Harrison

發佈文章

星期三, 十月 19, 2011

UEFI #pragma intrinsic( function1 [, function2, ...] )

在UEFI C語言中使用 #pragma intrinsic( function1 [, function2, ...] )方式可以簡化你拉Library的動作,但是這個功能是與Compiler相關,因此當你不使用Microsoft Compiler時,可能就要注意原本的UEFI CODE中使用這些方法的地方可能會有問題!
使用方式是在任何xxx.c 中宣告函數原型跟 #pragma intrinsic(),之後就可以在你的CODE中使用他!
//宣告函數原型int            _inp (unsigned short port);
int            _outp (unsigned short port, int databyte );


#pragma intrinsic(_inp)
#pragma intrinsic(_outp)


VOID CMOSWrite(UINT8 Port,UINT8 databyte)
{
_outp(0×70, Port);
_outp(0×71, databyte);
}



參考網站 : 
http://msdn.microsoft.com/zh-tw/library/tzkfha43.aspx

星期二, 九月 06, 2011

UEFI Screenshot (Capture screen)

EFI Shell 底下螢幕抓圖(抓屏)方式:

1) 切換到Graphic mode
    ConsoleControl->SetMode(ConsoleControl, EfiConsoleControlScreenGraphics);

2)使用Gop->Blt將螢幕圖抓下來

  GraphicsOutput->Blt(GraphicsOutput,
                      Image.PixelData,
                      EfiBltVideoToBltBuffer,  <--此參數決定你要抓圖還是顯示圖
                      0,
                      0,
                      0,
                      0,
                      Image.Width,
                      Image.Height,
                      0);


3)切換回Text Mode

[Note] 單純在Text Mode呼叫GOP->Blt會抓不到東西.