From ebd9cc8c971dba0f27831fb585491f0f5515014e Mon Sep 17 00:00:00 2001
From: AnonymusRaccoon
Date: Mon, 17 Feb 2020 14:06:41 +0100
Subject: [PATCH] Adding a get opt
---
main.cpp | 35 +++++++++++++++++++++++++-
sources/Renderer/QtRenderer/QtSFML.cpp | 7 +++++-
sources/SNES.cpp | 10 +++-----
3 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/main.cpp b/main.cpp
index e781c4b..9376351 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,21 +4,54 @@
#include
#include
+#include
#include "sources/SNES.hpp"
#include "sources/Renderer/SFRenderer.hpp"
#include "sources/Renderer/QtRenderer/QtSFML.hpp"
using namespace ComSquare;
+void usage(char *bin)
+{
+ std::cout << "ComSquare:" << std::endl << "\tUsage: " << bin << " rom_path" << std::endl;
+}
+
+void parseArguments(int argc, char **argv, SNES &snes)
+{
+ while (true) {
+ int this_option_optind = optind ? optind : 1;
+ int option_index = 0;
+ static struct option long_options[] = {
+ {"cpu-debug", no_argument, 0, 'c' },
+ {0, 0, 0, 0 }
+ };
+
+ char c = getopt_long(argc, argv, "c:pu-debug", long_options, &option_index);
+ if (c == -1)
+ break;
+ switch (c) {
+ case 0:
+ usage(argv[0]);
+ break;
+ case 'c':
+ snes.enableCPUDebugging();
+ break;
+ default:
+ break;
+ }
+ }
+}
+
int main(int argc, char **argv)
{
if (argc < 2) {
- std::cout << "ComSquare:" << std::endl << "\tUsage: " << argv[0] << " rom_path" << std::endl;
+ usage(argv[0]);
return 1;
}
QApplication app(argc, argv);
Renderer::QtSFML renderer(600, 800);
SNES snes(std::make_shared(), argv[1], renderer);
renderer.createWindow(snes, 60);
+ parseArguments(argc, argv, snes);
return QApplication::exec();
}
\ No newline at end of file
diff --git a/sources/Renderer/QtRenderer/QtSFML.cpp b/sources/Renderer/QtRenderer/QtSFML.cpp
index 9f6ca27..699255e 100644
--- a/sources/Renderer/QtRenderer/QtSFML.cpp
+++ b/sources/Renderer/QtRenderer/QtSFML.cpp
@@ -70,7 +70,12 @@ namespace ComSquare::Renderer
void QtFullSFML::_onUpdate()
{
- this->_snes.update();
+ try {
+ this->_snes.update();
+ } catch (std::exception &e) {
+ std::cerr << "An error occurred: " << e.what() << std::endl;
+ QApplication::quit();
+ }
}
void QtFullSFML::enableDebugCPU()
diff --git a/sources/SNES.cpp b/sources/SNES.cpp
index 9a0983e..122a71d 100644
--- a/sources/SNES.cpp
+++ b/sources/SNES.cpp
@@ -52,12 +52,8 @@ namespace ComSquare
void SNES::update()
{
- try {
- unsigned cycleCount = this->cpu->update();
- this->ppu->update(cycleCount);
- this->apu->update(cycleCount);
- } catch (std::exception &e) {
- std::cerr << "An error occurred: " << e.what() << std::endl;
- }
+ unsigned cycleCount = this->cpu->update();
+ this->ppu->update(cycleCount);
+ this->apu->update(cycleCount);
}
}