From 3e811db9cdda2e89a47d4ad7b3f5122e00f372a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Le=20Bihan?= Date: Tue, 12 May 2020 00:10:44 +0200 Subject: [PATCH] adding missing registers to stop trowing --- sources/PPU/PPU.cpp | 14 ++++++++++++ sources/PPU/PPU.hpp | 52 ++++++++++++++++++++++++++++++++++++++++++++- ui/ui_cpu.h | 2 +- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/sources/PPU/PPU.cpp b/sources/PPU/PPU.cpp index f9e8610..1106959 100644 --- a/sources/PPU/PPU.cpp +++ b/sources/PPU/PPU.cpp @@ -32,6 +32,16 @@ namespace ComSquare::PPU return this->_registers._mpy.mpym; case ppuRegisters::mpyh: return this->_registers._mpy.mpyh; + case ppuRegisters::slhv: + return this->_registers._slhv; + case ppuRegisters::oamdataread: + case ppuRegisters::vmdatalread: + case ppuRegisters::vmdatahread: + case ppuRegisters::ophct: + case ppuRegisters::opvct: + case ppuRegisters::stat77: + case ppuRegisters::stat78: + return 0; default: throw InvalidAddress("PPU Internal Registers read ", addr); } @@ -137,6 +147,10 @@ namespace ComSquare::PPU case ppuRegisters::m7d: this->_registers._m7[addr - ppuRegisters::m7a].m7 = (this->_registers._m7[addr - ppuRegisters::m7a].m7 << 8) | data; break; + case ppuRegisters::m7x: + case ppuRegisters::m7y: + // TODO these registers + break; case ppuRegisters::cgadd: this->_registers._cgadd = data; this->_registers._isLowByte = true; diff --git a/sources/PPU/PPU.hpp b/sources/PPU/PPU.hpp index 97987a1..1e52f33 100644 --- a/sources/PPU/PPU.hpp +++ b/sources/PPU/PPU.hpp @@ -482,7 +482,7 @@ namespace ComSquare::PPU uint8_t raw; } _setini; - // not in priority + // //! @brief MPYL - MPYM - MPYH Registers (Multiplication Result) union { @@ -493,6 +493,56 @@ namespace ComSquare::PPU }; uint32_t mpy; } _mpy; + //! @brief SLHV - Software Latch for H/V Counter + uint8_t _slhv; + //! @brief OAMDATAREAD - Data for OAM read + uint8_t _oamdataread; + //! @brief VMDATALREAD/VMDATAHREAD - VRAM Data Read low/high byte + union { + struct { + uint8_t vmDataLRead; + uint8_t vmDataHRead; + }; + uint16_t raw; + } _vmdataread; + //! @brief CGRAM Data read + union { + struct { + uint8_t cgDataLRead; + uint8_t cgDataHRead; + }; + uint16_t raw; + } _cgdataread; + //! @brief OPHCT/OPVCT - Horizontal/Vertical Scanline Location + union { + struct { + uint16_t opct: 9; + uint8_t _: 7; + }; + uint16_t raw; + } _opct; + //! @brief STAT77 - PPU Status Flag and Version + union { + struct { + uint8_t chipVersionNumber: 4; + bool _: 1; + bool modeSelect: 1; + bool rangeOverFlag: 1; + bool timeOverFlag: 1; + }; + uint8_t raw; + } _stat77; + //! @brief STAT78 - PPU Status Flag and Version + union { + struct { + uint8_t chipVersionNumber: 4; + bool mode: 1; + bool _: 1; + bool externalLatchFlag: 1; + bool interlaceField: 1; + }; + uint8_t raw; + } _stat78; }; //! @brief The class containing all the registers of the PPU diff --git a/ui/ui_cpu.h b/ui/ui_cpu.h index 97769dd..5bb8f98 100644 --- a/ui/ui_cpu.h +++ b/ui/ui_cpu.h @@ -1,7 +1,7 @@ /******************************************************************************** ** Form generated from reading UI file 'cpu.ui' ** -** Created by: Qt User Interface Compiler version 5.14.1 +** Created by: Qt User Interface Compiler version 5.13.2 ** ** WARNING! All changes made in this file will be lost when recompiling UI file! ********************************************************************************/