54 lines
1.7 KiB
C++
54 lines
1.7 KiB
C++
#include "../../src/System.h"
|
|
#include "Window.h"
|
|
#include "SdlKeyboardController.h"
|
|
|
|
#include <thread>
|
|
|
|
int main() {
|
|
|
|
using namespace std::placeholders;
|
|
|
|
nes::System device;
|
|
nes::SdlWindow window(nes::Ppu::SCREEN_WIDTH, nes::Ppu::SCREEN_HEIGHT);
|
|
window.setSize(nes::Ppu::SCREEN_WIDTH*2, nes::Ppu::SCREEN_HEIGHT*2);
|
|
bool working = true;
|
|
SDL_Event e;
|
|
|
|
device.connect(std::make_shared<SdlKeyboardController>());
|
|
//device.insertCartridge("/home/selim/Downloads/dk.nes");
|
|
device.insertCartridge("/Users/selim/Documents/nes/ppu_tests/vram_access.nes");
|
|
//device.insertCartridge("/Users/selim/Documents/nes/ff.nes");
|
|
//device.insertCartridge("C:\\Users\\selim\\Documents\\nestest.nes");
|
|
|
|
auto frameStart = std::chrono::steady_clock::now();
|
|
while (working) {
|
|
|
|
if(auto frameBuffer = device.tick()) {
|
|
|
|
// Draw frame
|
|
window.drawFrame(frameBuffer);
|
|
|
|
// Poll all accumulated events
|
|
while(SDL_PollEvent(&e)) {
|
|
switch(e.type) {
|
|
case SDL_EVENT_WINDOW_CLOSE_REQUESTED:
|
|
case SDL_EVENT_QUIT:
|
|
working = false;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Wait some time for slowing down to 60 fps
|
|
auto renderingTime = std::chrono::steady_clock::now();
|
|
auto elapsedTime = std::chrono::duration_cast<std::chrono::nanoseconds>(renderingTime - frameStart).count();
|
|
int64_t waitTime = 1000000000/60 - elapsedTime;
|
|
if(waitTime > 0) {
|
|
std::this_thread::sleep_for(std::chrono::nanoseconds(waitTime));
|
|
}
|
|
frameStart = std::chrono::steady_clock::now();
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|