aboutsummaryrefslogtreecommitdiff
path: root/src/chip8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/chip8.cpp')
-rw-r--r--src/chip8.cpp77
1 files changed, 4 insertions, 73 deletions
diff --git a/src/chip8.cpp b/src/chip8.cpp
index e813a61..dc63239 100644
--- a/src/chip8.cpp
+++ b/src/chip8.cpp
@@ -31,7 +31,7 @@ uint8_t fontset[FONTSET_SIZE] = {
0xF0, 0x80, 0xF0, 0x80, 0x80 // F
};
-Chip8::Chip8() {
+Chip8::Chip8() : table(nullptr) {
pc = ROM_START_ADDRESS;
for (uint32_t i = 0; i < FONTSET_SIZE; i++) {
@@ -44,79 +44,10 @@ Chip8::Chip8() {
.count()
);
randByte = std::uniform_int_distribution<uint8_t>(0, 255U);
-
- SetupTable();
-}
-
-void Chip8::SetupTable() {
- for (size_t i = 0; i <= sizeof(table0) / sizeof(table0[0]); i++) {
- table0[i] = &Chip8::OP_NULL;
- table8[i] = &Chip8::OP_NULL;
- tableE[i] = &Chip8::OP_NULL;
- }
-
- for (size_t i = 0; i <= sizeof(tableF) / sizeof(tableF[0]); i++) {
- tableF[i] = &Chip8::OP_NULL;
- }
-
- table[0x0] = &Chip8::Table0;
- table[0x1] = &Chip8::OP_1nnn;
- table[0x2] = &Chip8::OP_2nnn;
- table[0x3] = &Chip8::OP_3xkk;
- table[0x4] = &Chip8::OP_4xkk;
- table[0x5] = &Chip8::OP_5xy0;
- table[0x6] = &Chip8::OP_6xkk;
- table[0x7] = &Chip8::OP_7xkk;
- table[0x8] = &Chip8::Table8;
- table[0x9] = &Chip8::OP_9xy0;
- table[0xA] = &Chip8::OP_Annn;
- table[0xB] = &Chip8::OP_Bnnn;
- table[0xC] = &Chip8::OP_Cxkk;
- table[0xD] = &Chip8::OP_Dxyn;
- table[0xE] = &Chip8::TableE;
- table[0xF] = &Chip8::TableF;
-
- table0[0x0] = &Chip8::OP_00E0;
- table0[0xE] = &Chip8::OP_00EE;
-
- table8[0x0] = &Chip8::OP_8xy0;
- table8[0x1] = &Chip8::OP_8xy1;
- table8[0x2] = &Chip8::OP_8xy2;
- table8[0x3] = &Chip8::OP_8xy3;
- table8[0x4] = &Chip8::OP_8xy4;
- table8[0x5] = &Chip8::OP_8xy5;
- table8[0x6] = &Chip8::OP_8xy6;
- table8[0x7] = &Chip8::OP_8xy7;
- table8[0xE] = &Chip8::OP_8xyE;
-
- tableE[0x1] = &Chip8::OP_ExA1;
- tableE[0xE] = &Chip8::OP_Ex9E;
-
- tableF[0x07] = &Chip8::OP_Fx07;
- tableF[0x0A] = &Chip8::OP_Fx0A;
- tableF[0x15] = &Chip8::OP_Fx15;
- tableF[0x18] = &Chip8::OP_Fx18;
- tableF[0x1E] = &Chip8::OP_Fx1E;
- tableF[0x29] = &Chip8::OP_Fx29;
- tableF[0x33] = &Chip8::OP_Fx33;
- tableF[0x55] = &Chip8::OP_Fx55;
- tableF[0x65] = &Chip8::OP_Fx65;
-}
-
-void Chip8::Table0() {
- ((*this).*(table0[opcode & 0x000Fu]))();
-}
-
-void Chip8::Table8() {
- ((*this).*(table8[opcode & 0x000Fu]))();
-}
-
-void Chip8::TableE() {
- ((*this).*(tableE[opcode & 0x000Fu]))();
}
-void Chip8::TableF() {
- ((*this).*(tableF[opcode & 0x00FFu]))();
+void Chip8::SetTable(Table* opTable) {
+ table = opTable;
}
void Chip8::Cycle() {
@@ -125,7 +56,7 @@ void Chip8::Cycle() {
pc += 2;
// Decode and Execute
- ((*this).*(table[(opcode & 0xF000u) >> 12u]))();
+ table->table[(opcode & 0xF000u) >> 12u]();
}
void Chip8::TimerUpdateThread(Platform* platform) {