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()