#include "../loki.hpp" #include "interface.cpp" #include "medium.cpp" unique_pointer program; Program::Program(lstring args) { program = this; Application::onMain({&Program::main, this}); emulator = new SuperFamicom::Interface; emulator->bind = this; new Terminal; new Presentation; terminal->setFocused(); video = Video::create(); video->set(Video::Handle, presentation->viewport.handle()); video->set(Video::Synchronize, false); if(!video->init()) video = Video::create("None"); audio = Audio::create(); audio->set(Audio::Handle, presentation->viewport.handle()); audio->set(Audio::Synchronize, true); audio->set(Audio::Frequency, 96000u); audio->set(Audio::Latency, 80u); if(!audio->init()) audio = Audio::create("None"); input = Input::create(); input->set(Input::Handle, presentation->viewport.handle()); if(!input->init()) input = Input::create("None"); presentation->drawSplashScreen(); string location = args(1, ""); if(!directory::exists(location)) location = { //quick testing hack Path::user(), "Emulation/Super Famicom/", "Legend of Zelda - A Link to the Past, The (USA) (1.0).sfc/" }; if(directory::exists(location)) loadMedium(location); } auto Program::main() -> void { if(!emulator->loaded()) { usleep(20 * 1000); return; } devices = input->poll(); emulator->run(); } auto Program::quit() -> void { unloadMedium(); video.reset(); audio.reset(); input.reset(); Application::quit(); }