blob: b337b56c678ce7f4c4325276e3c441628bbdefa2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#ifndef CHIP8_HPP_
#define CHIP8_HPP_
#include <cstdint>
#include <random>
#include <bitset>
#include <mutex>
#include "platform.hpp"
#include "table.hpp"
class Table;
const uint32_t VIDEO_HEIGHT = 32;
const uint32_t VIDEO_WIDTH = 64;
class Chip8 {
public:
Chip8();
private:
uint8_t registers[16] {};
uint8_t memory[4096] {};
uint16_t index {};
uint16_t pc {};
uint16_t stack[16] {};
uint8_t sp {};
uint8_t delayTimer {};
uint8_t soundTimer {};
public:
uint16_t opcode;
public:
std::bitset<16> keypad;
std::bitset<2048> video;
private:
std::default_random_engine randGen;
std::uniform_int_distribution<uint8_t> randByte;
std::mutex timerMutex;
Table* table;
public:
void SetTable(Table* table);
void LoadROM(const char* filename);
void Cycle();
void TimerUpdateThread(Platform* platform);
public:
void OP_NULL(); void OP_00E0(); void OP_00EE();
void OP_1nnn(); void OP_2nnn(); void OP_3xkk();
void OP_4xkk(); void OP_5xy0(); void OP_6xkk();
void OP_7xkk(); void OP_8xy0(); void OP_8xy1();
void OP_8xy2(); void OP_8xy3(); void OP_8xy4();
void OP_8xy5(); void OP_8xy6(); void OP_8xy7();
void OP_8xyE(); void OP_9xy0(); void OP_Annn();
void OP_Bnnn(); void OP_Cxkk(); void OP_Dxyn();
void OP_Ex9E(); void OP_ExA1(); void OP_Fx07();
void OP_Fx0A(); void OP_Fx15(); void OP_Fx18();
void OP_Fx1E(); void OP_Fx29(); void OP_Fx33();
void OP_Fx55(); void OP_Fx65();
};
#endif
|