diff options
Diffstat (limited to 'src/chip8.cpp')
-rw-r--r-- | src/chip8.cpp | 77 |
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) { |