From 0dabd9a62bb6053f8577b009dced78f14897e166 Mon Sep 17 00:00:00 2001 From: "Zed A. Shaw" Date: Sun, 17 May 2026 13:17:29 -0400 Subject: [PATCH] Keyboard now works. --- src/chip8.cpp | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/chip8.hpp | 3 +++ src/main.cpp | 6 ++++++ 3 files changed, 69 insertions(+) diff --git a/src/chip8.cpp b/src/chip8.cpp index 2116d5f..b9867e4 100644 --- a/src/chip8.cpp +++ b/src/chip8.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"); + } +} diff --git a/src/chip8.hpp b/src/chip8.hpp index 0dc37c1..e205961 100644 --- a/src/chip8.hpp +++ b/src/chip8.hpp @@ -5,6 +5,7 @@ #include #include #include +#include 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); }; diff --git a/src/main.cpp b/src/main.cpp index 8ec2b66..d9249f2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -45,6 +45,12 @@ struct Display { if(event->is()) { window.close(); } + + if(const auto* key = event->getIf()) { + vm.handle_keyboard(key->scancode, true); + } else if(const auto* key = event->getIf()) { + vm.handle_keyboard(key->scancode, false); + } } }