aboutsummaryrefslogtreecommitdiff
path: root/src/chip8.cpp
diff options
context:
space:
mode:
authorRaghuram Subramani <raghus2247@gmail.com>2023-10-22 09:00:16 +0530
committerRaghuram Subramani <raghus2247@gmail.com>2023-10-22 09:00:16 +0530
commiteb6adb4b212cd55f8e6a553ecdcffa2f8a7cc63a (patch)
treea744ce43eeb5c2ff758ccc9d02750489b04bafc2 /src/chip8.cpp
parent689fa26e124cebb42518ed7ca14185d80fff20b9 (diff)
Implement sound
Diffstat (limited to 'src/chip8.cpp')
-rw-r--r--src/chip8.cpp29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/chip8.cpp b/src/chip8.cpp
index 485d061..1d46c49 100644
--- a/src/chip8.cpp
+++ b/src/chip8.cpp
@@ -1,9 +1,11 @@
#include "chip8.hpp"
+#include "platform.hpp"
#include <fstream>
#include <iostream>
#include <cstdint>
-#include <chrono>
+#include <thread>
+#include <mutex>
const uint32_t FONTSET_START_ADDRESS = 0x050;
const uint32_t ROM_START_ADDRESS = 0x200;
@@ -124,15 +126,24 @@ void Chip8::Cycle() {
// Decode and Execute
((*this).*(table[(opcode & 0xF000u) >> 12u]))();
-
- // Decrement delay timer
- if (delayTimer > 0) {
- delayTimer--;
- }
+}
- if (soundTimer > 0) {
- --soundTimer;
- }
+void Chip8::TimerUpdateThread(Platform* platform) {
+ while (true) {
+ std::this_thread::sleep_for(std::chrono::milliseconds(16));
+
+ std::lock_guard<std::mutex> lock(timerMutex);
+ if (delayTimer > 0) {
+ delayTimer--;
+ }
+
+ if (soundTimer > 0) {
+ soundTimer--;
+ platform->StartBeep();
+ } else {
+ platform->StopBeep();
+ }
+ }
}
void Chip8::LoadROM(const char* filename) {