From d4782a66dbd5b8d06b3557684c3f550d5c7cd074 Mon Sep 17 00:00:00 2001 From: Adrian Conlon Date: Tue, 26 Dec 2017 22:46:16 +0000 Subject: [PATCH] Some small changes for NES support: hopefully not broken anything! Signed-off-by: Adrian Conlon --- Ricoh2A03/inc/Ricoh2A03.h | 2 +- Ricoh2A03/inc/stdafx.h | 3 +++ Ricoh2A03/src/Ricoh2A03.cpp | 3 --- inc/Memory.h | 26 +++++++++++++++++--------- src/Memory.cpp | 24 +++++++++++++----------- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/Ricoh2A03/inc/Ricoh2A03.h b/Ricoh2A03/inc/Ricoh2A03.h index cfbc992..faddac2 100644 --- a/Ricoh2A03/inc/Ricoh2A03.h +++ b/Ricoh2A03/inc/Ricoh2A03.h @@ -8,7 +8,7 @@ namespace EightBit { class Ricoh2A03 final : public MOS6502 { public: Ricoh2A03(Bus& bus); - ~Ricoh2A03(); + virtual ~Ricoh2A03() = default; protected: virtual void SBC(uint8_t data) final; diff --git a/Ricoh2A03/inc/stdafx.h b/Ricoh2A03/inc/stdafx.h index 6f70f09..7673186 100644 --- a/Ricoh2A03/inc/stdafx.h +++ b/Ricoh2A03/inc/stdafx.h @@ -1 +1,4 @@ #pragma once + +#include +#include diff --git a/Ricoh2A03/src/Ricoh2A03.cpp b/Ricoh2A03/src/Ricoh2A03.cpp index 622c8ef..2ec9576 100644 --- a/Ricoh2A03/src/Ricoh2A03.cpp +++ b/Ricoh2A03/src/Ricoh2A03.cpp @@ -5,9 +5,6 @@ EightBit::Ricoh2A03::Ricoh2A03(Bus& bus) : MOS6502(bus) { } -EightBit::Ricoh2A03::~Ricoh2A03() { -} - void EightBit::Ricoh2A03::SBC(uint8_t data) { MOS6502::SBC_b(data); } diff --git a/inc/Memory.h b/inc/Memory.h index 265c115..49b6f3a 100644 --- a/inc/Memory.h +++ b/inc/Memory.h @@ -3,19 +3,35 @@ #include #include #include +#include namespace EightBit { class Memory { public: + static int load(std::ifstream& file, std::vector& output, int writeOffset, int readOffset, int limit, int maximumSize); + static int load(const std::string& path, std::vector& output, int writeOffset, int readOffset, int limit, int maximumSize); + Memory(size_t size = 0) : m_bytes(size) { } size_t size() const { return m_bytes.size(); } + int load(std::ifstream& file, int writeOffset = 0, int readOffset = 0, int limit = -1) { + const auto maximumSize = (int)m_bytes.size() - writeOffset; + return load(file, m_bytes, writeOffset, readOffset, limit, maximumSize); + } + int load(const std::string& path, int writeOffset = 0, int readOffset = 0, int limit = -1) { const auto maximumSize = (int)m_bytes.size() - writeOffset; - return loadBinary(path, m_bytes, writeOffset, readOffset, limit, maximumSize); + return load(path, m_bytes, writeOffset, readOffset, limit, maximumSize); + } + + int load(const std::vector& bytes, int writeOffset = 0, int readOffset = 0, int limit = -1) { + if (limit < 0) + limit = (int)bytes.size() - readOffset; + std::copy(bytes.cbegin() + readOffset, bytes.cbegin() + limit, m_bytes.begin() + writeOffset); + return limit; } protected: @@ -31,13 +47,5 @@ namespace EightBit { private: std::vector m_bytes; - - static int loadBinary( - const std::string& path, - std::vector& output, - int writeOffset, - int readOffset, - int limit, - int maximumSize); }; } diff --git a/src/Memory.cpp b/src/Memory.cpp index 095a847..d66968a 100644 --- a/src/Memory.cpp +++ b/src/Memory.cpp @@ -2,20 +2,11 @@ #include "Memory.h" #include -#include -int EightBit::Memory::loadBinary( - const std::string& path, - std::vector& output, - int writeOffset, - int readOffset, - int limit, - int maximumSize) { +int EightBit::Memory::load(std::ifstream& file, std::vector& output, const int writeOffset, const int readOffset, int limit, const int maximumSize) { - std::ifstream file; - file.exceptions(std::ios::failbit | std::ios::badbit); + file.seekg(0, std::ios::end); - file.open(path, std::ios::binary | std::ios::ate); const auto size = (int)file.tellg(); if ((maximumSize > 0) && ((size - readOffset) > maximumSize)) throw std::runtime_error("Binary cannot fit"); @@ -30,6 +21,17 @@ int EightBit::Memory::loadBinary( output.resize(extent); file.read((char*)&output[writeOffset], limit); + + return size; +} + +int EightBit::Memory::load(const std::string& path, std::vector& output, const int writeOffset, const int readOffset, const int limit, const int maximumSize) { + + std::ifstream file; + file.exceptions(std::ios::failbit | std::ios::badbit); + + file.open(path, std::ios::binary | std::ios::ate); + const auto size = load(file, output, writeOffset, readOffset, limit, maximumSize); file.close(); return size;