#include "../../src/System.h" #include "Window.h" #include "SdlKeyboardController.h" #include 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()); //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(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; }