很早就想寫個fc模擬器,但真是一件艱難的事情。。
所以先寫個chip8模擬器,日後再繼續研究fc模擬器。
chip8只有35條指令,屬於risc指令集,4k記憶體,2k視訊記憶體,16個暫存器(其中15個通用暫存器),支援16個按鍵,沒有中斷,但是有兩個計時器。
讀了下面兩個鏈結,就完全能理解了。
把**貼一下吧。
1#ifndef __chip8_h__
2#define __chip8_h__34
class
chip85;
6566
#endif
1#define _crt_secure_no_warnings 1
23 #include "
chip8.h
"4 #include
5 #include 6 #include 7 #include 8
9 unsigned char fontset[80] =10;
2829
void
chip8::init()
3048 srand((unsigned int
)time(null));49}
5051
char*filename)
5263
fclose(file);
64free(buffer);
65return
true;66
}6768void
chip8::emulatecycle()
6979
break;80
case
0x1000
:81 op_1nnn(); break;82
case
0x2000
:83 op_2nnn(); break;84
case
0x3000
:85 op_3xnn(); break;86
case
0x4000
:87 op_4xnn(); break;88
case
0x5000
:89 op_5xy0(); break;90
case
0x6000
:91 op_6xnn(); break;92
case
0x7000
:93 op_7xnn(); break;94
case
0x8000:95
switch(opcode & 0x000f
) 115
break
;116
case
0x9000
:117 op_9xy0(); break
;118
case
0xa000
:119 op_annn(); break
;120
case
0xb000
:121 op_bnnn(); break
;122
case
0xc000
:123 op_cxnn(); break
;124
case
0xd000
:125 op_dxyn(); break
;126
case
0xe000
:127
switch(opcode & 0x000f
) 133
break
;134
case
0xf000
:135
switch(opcode & 0x00ff
) 155
}156
if(delay_timer > 0
) 159
if(sound_timer > 0
) 162
}163
164void
chip8::op_0nnn()
165167
168void
chip8::op_00e0()
169174
175void
chip8::op_00ee()
176179
180void
chip8::op_1nnn()
181184
185void
chip8::op_2nnn()
186190
191void
chip8::op_3xnn()
192195
196void
chip8::op_4xnn()
197200
201void
chip8::op_5xy0()
202205
206void
chip8::op_6xnn()
207211
212void
chip8::op_7xnn()
213217
218void
chip8::op_8xy0()
219223
224void
chip8::op_8xy1()
225229
230void
chip8::op_8xy2()
231235
236void
chip8::op_8xy3()
237241
242void
chip8::op_8xy4()
243248
249void
chip8::op_8xy5()
250255
256void
chip8::op_8xy6()
257262
263void
chip8::op_8xy7()
264269
270void
chip8::op_8xye()
271276
277void
chip8::op_9xy0()
278281
282void
chip8::op_annn()
283287
288void
chip8::op_bnnn()
289292
293void
chip8::op_cxnn()
294298
299void
chip8::op_dxyn()
300315 gfx[x + xline + ((y + yline) * 64)] ^= 1
;316
}317
}318
}319 drawflag = true
;320 pc += 2
;321
}322
323void
chip8::op_ex9e()
324327
328void
chip8::op_exa1()
329332
333void
chip8::op_fx07()
334338
339void
chip8::op_fx0a()
340350
}351
352if(!keypress)
355 pc += 2
;356
}357
358void
chip8::op_fx15()
359363
364void
chip8::op_fx18()
365369
370void
chip8::op_fx1e()
371376
377void
chip8::op_fx29()
378382
383void
chip8::op_fx33()
384391
392void
chip8::op_fx55()
393398 i += ((opcode & 0x0f00) >> 8) + 1
;399 pc += 2
;400
}401
402void
chip8::op_fx65()
403408 i += ((opcode & 0x0f00) >> 8) + 1
;409 pc += 2
;410 }
有關遊戲模擬器
寫在前面 最近公司在做 gba的模擬器,順便找了點資料研究了一下。提起模擬器,愛好者們一定會想到 neoragex mame,n64 等著名遊戲機的模擬器。在這些模擬器上可以模擬一些功能強大的街機板,可以讓我們在自己的 pc上免費玩街機的遊戲。想起當初數著錢買遊戲幣的日子,真是乙個天堂乙個人間啊。玩...
模擬器不全屏 Mac原生遊戲模擬器
你是否想為自己的mac電腦安裝一款蘋果原生的遊戲模擬器呢?快來試試openemu for mac吧!openemu mac版是執行在mac平台的原生遊戲模擬器。openemu的遊戲主管介面直觀友好,即使是新手也能一眼看懂。把 rom 檔案拖拽進對應的頻道就能新增遊戲,雙擊右側主介面裡的遊戲封面開始玩...
街機遊戲模擬器 mame for linux
偶爾在linux裡也是要玩下遊戲的,裝乙個街機模擬器玩玩kof也不行噢。sudo apt get install xmame 修改sudo vi etc xmame xmamerc配置檔案,下面的路徑指向你實際的rom目錄 rompath usr share games xmame roms 比如執...