From ad5aacbf56aa65b23ce201304ce490de18e85694 Mon Sep 17 00:00:00 2001
From: Anonymus Raccoon
Date: Sun, 16 Feb 2020 02:22:46 +0100
Subject: [PATCH] Making the debugger available on demand with a macro
---
CMakeLists.txt | 8 ++-
main.cpp | 4 +-
sources/PPU/PPU.cpp | 64 ++++++++++++-------
sources/Renderer/NoRenderer.cpp | 5 +-
sources/Renderer/NoRenderer.hpp | 2 +-
sources/Renderer/QtRenderer/QtSFML.cpp | 2 +-
.../QtRenderer/{QtSFML.h => QtSFML.hpp} | 8 +--
sources/Renderer/QtRenderer/QtWidgetSFML.cpp | 2 +-
.../{QtWidgetSFML.h => QtWidgetSFML.hpp} | 6 +-
sources/SNES.cpp | 4 +-
10 files changed, 67 insertions(+), 38 deletions(-)
rename sources/Renderer/QtRenderer/{QtSFML.h => QtSFML.hpp} (91%)
rename sources/Renderer/QtRenderer/{QtWidgetSFML.h => QtWidgetSFML.hpp} (88%)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a77fe6f..2f5b665 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -121,7 +121,13 @@ add_executable(ComSquare
sources/Ram/ExtendedRam.hpp
sources/Debugger/DebugCpu.cpp
sources/Debugger/DebugCpu.hpp
- sources/Renderer/QtRenderer/QtSFML.cpp sources/Renderer/QtRenderer/QtSFML.h sources/Renderer/QtRenderer/QtWidgetSFML.cpp sources/Renderer/QtRenderer/QtWidgetSFML.h)
+ sources/Renderer/QtRenderer/QtSFML.cpp
+ sources/Renderer/QtRenderer/QtSFML.hpp
+ sources/Renderer/QtRenderer/QtWidgetSFML.cpp
+ sources/Renderer/QtRenderer/QtWidgetSFML.hpp
+)
+
+target_compile_definitions(ComSquare PUBLIC DEBUGGER_ENABLED)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
diff --git a/main.cpp b/main.cpp
index fe39575..98d1320 100644
--- a/main.cpp
+++ b/main.cpp
@@ -8,7 +8,7 @@
#include
#include "sources/SNES.hpp"
#include "sources/Renderer/SFRenderer.hpp"
-#include "sources/Renderer/QtRenderer/QtSFML.h"
+#include "sources/Renderer/QtRenderer/QtSFML.hpp"
using namespace ComSquare;
@@ -22,6 +22,6 @@ int main(int argc, char **argv)
Renderer::QtSFML renderer(app, 600, 800);
SNES snes(std::make_shared(), argv[1], renderer);
renderer.createWindow(snes, 60);
- snes.enableCPUDebugging();
+ //snes.enableCPUDebugging();
return QApplication::exec();
}
\ No newline at end of file
diff --git a/sources/PPU/PPU.cpp b/sources/PPU/PPU.cpp
index 3d6b59d..1a212dc 100644
--- a/sources/PPU/PPU.cpp
+++ b/sources/PPU/PPU.cpp
@@ -3,6 +3,7 @@
//
#include
+#include
#include "PPU.hpp"
#include "../Exceptions/NotImplementedException.hpp"
#include "../Exceptions/InvalidAddress.hpp"
@@ -40,7 +41,7 @@ namespace ComSquare::PPU
break;
case ppuRegisters::oamdata:
this->_oamdata = data;
- throw InvalidAddress("oamdata", addr);
+ //throw InvalidAddress("oamdata", addr);
std::cout << "oamdata" << std::endl;
// the oamAddress have to be calculated if fblank or not (not implemented)
_oamram.write(this->_oamadd.oamAddress, this->_oamdata);
@@ -88,6 +89,7 @@ namespace ComSquare::PPU
case 0b11:
this->_incrementAmount = 128;
}
+ break;
case ppuRegisters::vmaddl:
this->_vmadd.vmaddl = data;
break;
@@ -95,7 +97,7 @@ namespace ComSquare::PPU
this->_vmadd.vmaddh = data;
break;
case ppuRegisters::vmdatal:
- throw InvalidAddress("vmdata", addr);
+ //throw InvalidAddress("vmdata", addr);
std::cout << "vmdatal" << std::endl;
if (!this->_inidisp.fblank) {
this->_vmdata.vmdatal = data;
@@ -121,19 +123,20 @@ namespace ComSquare::PPU
this->_isLowByte = true;
break;
case ppuRegisters::cgdata:
- throw InvalidAddress("cgdata", addr);
+ //throw InvalidAddress("cgdata", addr);
if (this->_isLowByte) {
- std::cout << "cgadatal" << std::endl;
+ //std::cout << "cgadatal" << std::endl;
this->_cgdata.cgdatal = data;
- this->_cgram.write(this->_cgadd, this->_cgdata.raw);
+ //this->_cgram.write(this->_cgadd, this->_cgdata.raw);
+ //this->_cgadd++;
}
else {
- std::cout << "cgadatah" << std::endl;
+ //std::cout << "cgadatah" << std::endl;
this->_cgdata.cgdatah = data;
this->_cgram.write(this->_cgadd, this->_cgdata.raw);
+ this->_cgadd++;
}
this->_isLowByte = !this->_isLowByte;
- this->_cgadd++;
break;
case ppuRegisters::w12sel:
case ppuRegisters::w34sel:
@@ -203,28 +206,45 @@ namespace ComSquare::PPU
void PPU::update(unsigned cycles)
{
(void)cycles;
- int inc = 0;
- uint32_t pixelTmp = 0xFFFFFFFF;
- pixelTmp |= this->_inidisp.brightness;
- std::cout << "update" << std::endl;
- if (!this->_inidisp.fblank) {
- for (int x = 0; x < 448; x++) {
- for (int y = 0; y < 512; y++) {
- if (inc == 0xFA00)
- inc = 0;
- //std::cout << "holy" << std::endl;
- this->_renderer.putPixel(x, y, (uint32_t)this->_vram.read(inc++));
- }
- }
+ this->_bus->write(0x2121, 0);
+ for (uint16_t value = 0; value <= 256; value++) {
+ this->_bus->write(0x2122, 0b11100000);
+ this->_bus->write(0x2122, 0b00000011);
+ }
+ uint16_t tmp;
+ uint8_t red;
+ uint8_t green;
+ uint8_t blue;
+ uint32_t pixelTmp = 0x000000FF;
+ //std::cout << "update" << std::endl;
+ if (!this->_inidisp.fblank) {
+ for (int y = 0; y <= 255; y++) {
+ tmp = this->_cgram.read(y);
+
+ //std::cout << "tmp " << std::bitset<16>(tmp) << std::endl;
+ blue = (tmp & 0x7D00U) >> 10U;
+ green = (tmp & 0x03E0U) >> 5U;
+ red = (tmp & 0x001FU);
+
+ //std::cout << "red " << std::bitset<8>(red) << std::endl;
+ //std::cout << "green " << std::bitset<8>(green) << std::endl;
+ //std::cout << "blue " << std::bitset<8>(blue) << std::endl;
+ pixelTmp += (red * 256U / 32U) << 24U;
+ pixelTmp += (green * 256U / 32U) << 16U;
+ pixelTmp += (blue * 256U / 32U) << 8U;
+ //std::cout << "value of pixel " << std::hex << pixelTmp << " pour inc " << std::dec << y << std::endl;
+ for (int x = 0; x < 100; x++)
+ this->_renderer.putPixel(x, y, pixelTmp);
+ pixelTmp = 0xFF;
+ }
}
- //std::cout << "cgadata2" << std::endl;
this->_renderer.drawScreen();
}
PPU::PPU(const std::shared_ptr &bus, Renderer::IRenderer &renderer):
_renderer(renderer),
_bus(std::move(bus)),
- _vram(64000),
+ _vram(65536),
_oamram(544),
_cgram(512)
{
diff --git a/sources/Renderer/NoRenderer.cpp b/sources/Renderer/NoRenderer.cpp
index 307d5bf..7522d08 100644
--- a/sources/Renderer/NoRenderer.cpp
+++ b/sources/Renderer/NoRenderer.cpp
@@ -29,8 +29,9 @@ namespace ComSquare::Renderer
(void)maxFPS;
}
- void NoRenderer::createWindow(int maxFPS)
+ void NoRenderer::createWindow(SNES &snes, int maxFPS)
{
- (void)maxFPS.
+ (void)snes;
+ (void)maxFPS;
}
}
\ No newline at end of file
diff --git a/sources/Renderer/NoRenderer.hpp b/sources/Renderer/NoRenderer.hpp
index 3c45f6f..c4cb21d 100644
--- a/sources/Renderer/NoRenderer.hpp
+++ b/sources/Renderer/NoRenderer.hpp
@@ -26,7 +26,7 @@ namespace ComSquare::Renderer
void getEvents();
//! @brief Use this function to create the window.
//! @param maxFPS The number of FPS you aim to run on.
- void createWindow(int maxFPS) override;
+ void createWindow(SNES &snes, int maxFPS) override;
//! @brief Constructor that return the window component of the SFML.
//! @param height height of the window.
//! @param width width of the window.
diff --git a/sources/Renderer/QtRenderer/QtSFML.cpp b/sources/Renderer/QtRenderer/QtSFML.cpp
index a494020..1d7a27c 100644
--- a/sources/Renderer/QtRenderer/QtSFML.cpp
+++ b/sources/Renderer/QtRenderer/QtSFML.cpp
@@ -6,7 +6,7 @@
#include
#include
#include
-#include "QtSFML.h"
+#include "QtSFML.hpp"
#ifdef Q_WS_X11
#include
diff --git a/sources/Renderer/QtRenderer/QtSFML.h b/sources/Renderer/QtRenderer/QtSFML.hpp
similarity index 91%
rename from sources/Renderer/QtRenderer/QtSFML.h
rename to sources/Renderer/QtRenderer/QtSFML.hpp
index 8925835..b0413c5 100644
--- a/sources/Renderer/QtRenderer/QtSFML.h
+++ b/sources/Renderer/QtRenderer/QtSFML.hpp
@@ -2,15 +2,15 @@
// Created by anonymus-raccoon on 2/15/20.
//
-#ifndef COMSQUARE_QTSFML_H
-#define COMSQUARE_QTSFML_H
+#ifndef COMSQUARE_QTSFML_HPP
+#define COMSQUARE_QTSFML_HPP
#include
#include
#include
#include "../IRenderer.hpp"
#include "../SFRenderer.hpp"
-#include "QtWidgetSFML.h"
+#include "QtWidgetSFML.hpp"
namespace ComSquare::Renderer
{
@@ -45,4 +45,4 @@ namespace ComSquare::Renderer
};
}
-#endif //COMSQUARE_QTSFML_H
+#endif //COMSQUARE_QTSFML_HPP
diff --git a/sources/Renderer/QtRenderer/QtWidgetSFML.cpp b/sources/Renderer/QtRenderer/QtWidgetSFML.cpp
index 35392f4..ca58ee2 100644
--- a/sources/Renderer/QtRenderer/QtWidgetSFML.cpp
+++ b/sources/Renderer/QtRenderer/QtWidgetSFML.cpp
@@ -2,7 +2,7 @@
// Created by anonymus-raccoon on 2/16/20.
//
-#include "QtWidgetSFML.h"
+#include "QtWidgetSFML.hpp"
namespace ComSquare::Renderer
{
diff --git a/sources/Renderer/QtRenderer/QtWidgetSFML.h b/sources/Renderer/QtRenderer/QtWidgetSFML.hpp
similarity index 88%
rename from sources/Renderer/QtRenderer/QtWidgetSFML.h
rename to sources/Renderer/QtRenderer/QtWidgetSFML.hpp
index 03071c7..961357f 100644
--- a/sources/Renderer/QtRenderer/QtWidgetSFML.h
+++ b/sources/Renderer/QtRenderer/QtWidgetSFML.hpp
@@ -2,8 +2,8 @@
// Created by anonymus-raccoon on 2/16/20.
//
-#ifndef COMSQUARE_QTWIDGETSFML_H
-#define COMSQUARE_QTWIDGETSFML_H
+#ifndef COMSQUARE_QTWIDGETSFML_HPP
+#define COMSQUARE_QTWIDGETSFML_HPP
#include
#include
@@ -30,4 +30,4 @@ namespace ComSquare::Renderer
};
}
-#endif //COMSQUARE_QTWIDGETSFML_H
+#endif //COMSQUARE_QTWIDGETSFML_HPP
diff --git a/sources/SNES.cpp b/sources/SNES.cpp
index 6d2ecb5..b2367af 100644
--- a/sources/SNES.cpp
+++ b/sources/SNES.cpp
@@ -23,7 +23,9 @@ namespace ComSquare
void SNES::enableCPUDebugging()
{
- this->cpu = std::make_shared(*this->cpu, *this);
+ #ifdef DEBUGGER_ENABLED
+ this->cpu = std::make_shared(*this->cpu, *this);
+ #endif
}
void SNES::disableCPUDebugging()