C 版 Chip8遊戲模擬器

2022-02-13 08:21:21 字數 4309 閱讀 6707

很早就想寫個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 比如執...