2014年12月23日 星期二

處理器模擬

處理器模擬其實跟記憶體模擬處理那塊綁得很密,但撇開記憶體處裡那塊不談,單純談模擬CPU的一點感想.

還是老話一句,程式技巧並不是成功的最關鍵,而是硬體觀念,撰寫CPU模擬處理其實對沒有硬相關背景的人來說有點硬(悟性高的人例外...),我想對於有接觸過微處理機控制.組語撰寫的人會比較容易上手些,真的需要對每一個指令都瞭若指掌,才能正確用程式描述出行為.

以我撰寫Z80來說,剛寫好後,以為沒啥問題,結果跑起來錯誤一堆(雖然最後修正了),而撰寫中的6502也很怕因為觀念的不正確,導致撰寫出錯誤的CODE.

6502有許多定址模式,很容易混淆,或是錯誤處理,雖然指令很少(56個).暫存器也很少( X . Y . A . PC . SP . STATUS ) , 但每個指令可能有不只一個定址模式的資料處理方式(因此會有151個不同的opcode,但沒塞滿8bit指令最多256個可能),相比於Z80可能更要細心注意 ( z80是暫存器多不少,每個指令用不同的暫存器,就有不同的處理與opcode,但很多人會把用function的方式去處理,把暫存器當成是變數,這樣就減少了很多程式碼的量就是).

最大的關鍵我想還是在於資料如何正確地去解讀,好比說signed或是unsinged的處理不能混淆,以及 carry . overflow 的行為和處理等等,都是很小但卻影響到正確的細節.

即使有了正確的硬體觀念,你對於你所使用的語言特性也需要深入些去理解(特別在bitwise這塊),否則會出現不是預期的結果,越高階的語言雖然越方便,但細節怎麼處理就越含糊,常常好幾次出現錯誤,是因為我撰寫出來的code跑起來並不是我以為的那樣,追下去才知道問題.

總之考驗的是你的細心.硬體了解.和對於程式語言工具bitwise相關處理了解的夠不夠透徹.

沒有留言:

張貼留言