2011-09-07 76 views
5

我正在編寫一個解釋的68k模擬器作爲個人/教育項目。現在我正在嘗試開發一個簡單的,通用的解碼機制。解碼68K指令

據我所知,每條指令的前兩個字節足以唯一地標識操作(有兩個罕見的例外),並且剩下要讀取的字的數量(如果有)。

這裏是我想在我的解碼階段完成的任務:

1. read two bytes 
2. determine which instruction it is 
3. extract the operands 
4. pass the opcode and the operands on to the execute phase 

我不能只通過前兩個字節爲查找表像我可以在RISC拱前幾位,因爲操作數是「在途中」。我怎樣才能以一般方式完成部分2

一般來說,我的問題是:如何從解碼過程中去除操作數的可變性?

更多的背景:

這裏是從程序員的參考手冊的8.2節的部分表:

Table 8.2. Operation Code Map 

Bits 15-12  Operation 
0000   Bit Manipulation/MOVEP/Immediate 
0001   Move Byte 
... 
1110   Shift/Rotate/Bit Field 
1111   Coprocessor Interface... 

這對我來說取得了很大的意義,但後來我看每個位模式指令,並注意到在15到12位是0001,0010或0011時沒有單個指令。我必須有一些大的圖片丟失。

Decoding Z80 Opcodes網站明確解釋解碼,這是我沒有在68k程序員的參考手冊或通過谷歌搜索找到的東西。

+0

您的項目發展到什麼程度,您有反彙編程序還是仿真程序? –

+0

我還在構建一個生成完整查找表的腳本。大約完成了70%。 – mwcz

+0

@CountablyInfinite你正在做一個類似的項目嗎? – mwcz

回答

2

我決定簡單地爲每條指令創建一個查找表,併爲每個指令創建一個可能的模式。這是我的第一個想法,但我把它放棄爲「浪費,不雅」。現在,我接受它「非常快」。

+1

啊,模擬器編碼的第一條規則:有時看起來笨重的蠻力方法是最好的一。 :) –

+1

而且它非常依賴運行仿真的CPU。一個16兆字節的L2可以創造奇蹟。 :) –