Keyboard now works.

master
Zed A. Shaw 2 days ago
parent 910b5c72ce
commit 0dabd9a62b
  1. 60
      src/chip8.cpp
  2. 3
      src/chip8.hpp
  3. 6
      src/main.cpp

@ -106,6 +106,9 @@ void Chip8::Cycle() {
if(soundTimer > 0) {
--soundTimer;
}
fmt::println("opcode: {}, delay: {}, sound: {}, pc: {}",
opcode, delayTimer, soundTimer, pc);
}
@ -453,3 +456,60 @@ void Chip8::OP_Fx65() {
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");
}
}

@ -5,6 +5,7 @@
#include <fstream>
#include <chrono>
#include <random>
#include <SFML/Window/Keyboard.hpp>
const unsigned int START_ADDRESS = 0x200;
const unsigned int FONTSET_SIZE = 80;
@ -117,4 +118,6 @@ class Chip8 {
}
void Cycle();
void handle_keyboard(const sf::Keyboard::Scancode scancode, bool down);
};

@ -45,6 +45,12 @@ struct Display {
if(event->is<sf::Event::Closed>()) {
window.close();
}
if(const auto* key = event->getIf<sf::Event::KeyPressed>()) {
vm.handle_keyboard(key->scancode, true);
} else if(const auto* key = event->getIf<sf::Event::KeyReleased>()) {
vm.handle_keyboard(key->scancode, false);
}
}
}

Loading…
Cancel
Save