2016年7月12日 星期二

GNU lightning jit 應用例子

對模擬器的喜好來自於對遊戲主機童年時期的熱愛(約佔70%),以及本身是資訊人,多少對技術方面的東西會更有興趣些,所以偶而會找找相關資訊看看.

其中剛好看到了一個利用JIT加入效能的範例如下

http://jeffq.com/blog/nds4droid-release-35-beta/

用的是 GNU lightning 這套JIT加速library

https://www.gnu.org/software/lightning

相當有趣.

隨著資訊技術這幾年的發展,很多新的技術都慢慢被應用在模擬器的開發上.

8086 指令解碼

x86 模擬器裝案的進展荒廢許久,最近把顯示卡的部分K一K了解一下,打算重新再來過,反正姑且一試,第一個步驟還是習慣先從CPU本身的核心開始撰寫起,當然16Bit的CPU指令複雜度已經沒像8bit CPU那麼容易了,但我個人覺得比起ARM,x86的8086這顆cpu指令解碼複雜程度相對來說還是簡單許多.

8086這顆cpu的指令已經無法使用拿指令的第一個byte用窮舉法搭配 switch case的方式來做完全的剖析,一定會有重覆的衝突,不過無所謂,只有少數幾個指令需要用第二個byte的 bit 5~3 這三個bits再做一次分析,還是可以用窮舉法,只是某幾個地方需要用到兩層.

最聰明的decode策略應該是完全了解指令的格式規則,然後用樹狀關係圖去分層出解碼的步驟,但這種方法未必會比較快,最笨的窮舉法直接靠table查詢,理論上應該是最快,但就是怕缺漏掉一些項目.

8086 格式
http://aturing.umcs.maine.edu/~meadow/courses/cos335/8086-instformat.pdf

datasheet
http://www.ece.cmu.edu/~ece740/f11/lib/exe/fetch.php?media=wiki:8086-datasheet.pdf

286開始有保護模式,386第一顆32bit cpu,486直接附帶浮點函數計算能力與相關指令,一越新的硬體越複雜,先從簡單開始,至少8086已經可以跑win 3.0了 ( 3.1需要跑在最低286上).

最後不得提醒一下,不要以為官方出版的資料或是規格書之類的東西就100%不會有錯誤,實際上就還是會有可能遇到,而且我在兩分資料中各遇到了兩次....

舉個例子來說


2016年7月7日 星期四

x86 電腦研究心得

看 8086tiny 這專案剛看會給人誤會,以為要模擬PC X86模擬器不會是太複雜的事情,再追究下去,會發現這專案用了很多相當聰明的方式簡化了所包含的CODE數量,但簡化的道理卻因為對硬體沒有夠詳細的了解,也不知所以然來,於是放棄了以這專案為學習的開始,改以 V86 https://github.com/copy/v86 這款js pc的模擬器為學習對象,完整度可以執行到win98不是問題,重點是很紮實地去跑了system bios跟vga bios,追著這專案跑,一跑到VGA那塊馬上發現自己的無知,原來電腦VGA顯卡還是有很多學問,很多對應port的Register各自有各自的功能,然後記憶體排列的原理和規則等等,要搞懂也不是那麼簡單,像這種東西在早期有很多相關的書或是資料,但現在可以找到的說明越來越少,能找到的多數是英文,但解釋的也未必很清楚

http://wiki.osdev.org/VGA_Hardware
這篇有很多vga卡 port的作用和記憶體屬性規則在各種顯示模式下的說明

很多東西還得再細看和實際demo測試....不是說那麼好懂.