|
|
|
@ -106,6 +106,9 @@ void Chip8::Cycle() { |
|
|
|
if(soundTimer > 0) { |
|
|
|
if(soundTimer > 0) { |
|
|
|
--soundTimer; |
|
|
|
--soundTimer; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fmt::println("opcode: {}, delay: {}, sound: {}, pc: {}", |
|
|
|
|
|
|
|
opcode, delayTimer, soundTimer, pc); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -453,3 +456,60 @@ void Chip8::OP_Fx65() { |
|
|
|
registers[i] = memory[index + i]; |
|
|
|
registers[i] = memory[index + i]; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Chip8::handle_keyboard(const sf::Keyboard::Scancode scancode, bool down) { |
|
|
|
|
|
|
|
using KEY = sf::Keyboard::Scan; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
switch(scancode) { |
|
|
|
|
|
|
|
case KEY::X: |
|
|
|
|
|
|
|
keypad[0] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::Num1: |
|
|
|
|
|
|
|
keypad[1] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::Num2: |
|
|
|
|
|
|
|
keypad[2] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::Num3: |
|
|
|
|
|
|
|
keypad[3] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::Q: |
|
|
|
|
|
|
|
keypad[4] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::W: |
|
|
|
|
|
|
|
keypad[5] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::E: |
|
|
|
|
|
|
|
keypad[6] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::A: |
|
|
|
|
|
|
|
keypad[7] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::S: |
|
|
|
|
|
|
|
keypad[8] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::D: |
|
|
|
|
|
|
|
keypad[9] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::Z: |
|
|
|
|
|
|
|
keypad[0xA] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::C: |
|
|
|
|
|
|
|
keypad[0xB] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::Num4: |
|
|
|
|
|
|
|
keypad[0xC] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::R: |
|
|
|
|
|
|
|
keypad[0xD] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::F: |
|
|
|
|
|
|
|
keypad[0xE] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case KEY::V: |
|
|
|
|
|
|
|
keypad[0xF] = down; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
fmt::println("Unknown key"); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|