Implementiral clock, dodal machine.h in popravu pol vsa shit v machine.cpp, naredu ukaze za f1, f2

This commit is contained in:
Timon 2025-11-28 19:35:15 +01:00
parent 3cfdd46516
commit cf3dd766d0
5 changed files with 308 additions and 88 deletions

46
ass2/cpu.cpp Normal file
View file

@ -0,0 +1,46 @@
#include "cpu.h"
void cpu::start() {
if (running) return;
running = true;
nitUre = std::thread(&cpu::zankaUre, this);
}
void cpu::stop() {
running = false;
if (nitUre.joinable())
nitUre.join();
}
bool cpu::isRunning() {
return running.load();
}
int cpu::getSpeed() {
return hitrostKhz;
}
void cpu::setSpeed(int speedKhz) {
if (speedKhz < 1) speedKhz = 1;
hitrostKhz = speedKhz;
}
void cpu::zankaUre() {
while (running) {
// 1. Izvedemo določeno št. ukazov na tick
for (int i = 0; i < operacijeNaTick; i++) {
cpu::m->execute();
}
// 2. Izračunamo kolikokrat mora "tikati" na sekundo
// speed_kHz = n tisoč ukazov / sekundo
// operacijeNaTick = koliko ukazov na en tik
// ticksPerSecond = (hitrostKhz * 1000) / operacijeNaTick
double ticksPerSecond = (hitrostKhz * 1000.0) / operacijeNaTick;
double sleepTimeSec = 1.0 / ticksPerSecond;
// 3. Ustavimo nit za izračunani čas
std::this_thread::sleep_for(std::chrono::duration<double>(sleepTimeSec));
}
}