From 379dfe4ac374974c2dd85fb63d322caa09a0e4d5 Mon Sep 17 00:00:00 2001 From: Stephen Anthony Date: Thu, 2 Jul 2020 17:28:48 -0230 Subject: [PATCH] Refactor Cart::getImage, always return a ByteBuffer. Most classes did this already, but some didn't. So we standardize on this, and eliminate raw pointers. --- src/debugger/gui/Cart3EPlusWidget.cxx | 4 +-- src/debugger/gui/Cart3EWidget.cxx | 2 +- src/debugger/gui/Cart3FWidget.cxx | 2 +- src/debugger/gui/CartEnhancedWidget.cxx | 2 +- src/emucore/Cart.cxx | 6 ++-- src/emucore/Cart.hxx | 4 +-- src/emucore/Cart4A50.cxx | 9 +++--- src/emucore/Cart4A50.hxx | 6 ++-- src/emucore/CartAR.cxx | 4 +-- src/emucore/CartAR.hxx | 4 +-- src/emucore/CartBUS.cxx | 19 ++++++------ src/emucore/CartBUS.hxx | 6 ++-- src/emucore/CartCDF.cxx | 20 +++++++------ src/emucore/CartCDF.hxx | 6 ++-- src/emucore/CartCM.cxx | 13 ++++---- src/emucore/CartCM.hxx | 6 ++-- src/emucore/CartCTY.cxx | 17 ++++++----- src/emucore/CartCTY.hxx | 6 ++-- src/emucore/CartDPCPlus.cxx | 21 ++++++------- src/emucore/CartDPCPlus.hxx | 6 ++-- src/emucore/CartEnhanced.cxx | 4 +-- src/emucore/CartEnhanced.hxx | 4 +-- src/emucore/CartF6.cxx | 1 - src/emucore/CartMNetwork.cxx | 4 +-- src/emucore/CartMNetwork.hxx | 4 +-- src/emucore/Console.cxx | 2 +- src/emucore/ControllerDetector.cxx | 31 ++++++++++--------- src/emucore/ControllerDetector.hxx | 40 ++++++++++++++----------- src/gui/GameInfoDialog.cxx | 4 +-- src/gui/RomInfoWidget.cxx | 4 +-- src/gui/StellaSettingsDialog.cxx | 4 +-- 31 files changed, 139 insertions(+), 126 deletions(-) diff --git a/src/debugger/gui/Cart3EPlusWidget.cxx b/src/debugger/gui/Cart3EPlusWidget.cxx index 163dc23fd..cd0fda251 100644 --- a/src/debugger/gui/Cart3EPlusWidget.cxx +++ b/src/debugger/gui/Cart3EPlusWidget.cxx @@ -35,7 +35,7 @@ string Cartridge3EPlusWidget::description() { ostringstream info; size_t size; - const uInt8* image = myCart.getImage(size); + const ByteBuffer& image = myCart.getImage(size); uInt16 numRomBanks = myCart.romBankCount(); uInt16 numRamBanks = myCart.ramBankCount(); @@ -60,7 +60,7 @@ string Cartridge3EPlusWidget::description() void Cartridge3EPlusWidget::bankSelect(int& ypos) { size_t size; - const uInt8* image = myCart.getImage(size); + const ByteBuffer& image = myCart.getImage(size); const int VGAP = myFontHeight / 4; VariantList banktype; diff --git a/src/debugger/gui/Cart3EWidget.cxx b/src/debugger/gui/Cart3EWidget.cxx index 4683ea7d4..910f03368 100644 --- a/src/debugger/gui/Cart3EWidget.cxx +++ b/src/debugger/gui/Cart3EWidget.cxx @@ -33,7 +33,7 @@ string Cartridge3EWidget::description() { ostringstream info; size_t size; - const uInt8* image = myCart.getImage(size); + const ByteBuffer& image = myCart.getImage(size); uInt16 numRomBanks = myCart.romBankCount(); uInt16 numRamBanks = myCart.ramBankCount(); diff --git a/src/debugger/gui/Cart3FWidget.cxx b/src/debugger/gui/Cart3FWidget.cxx index ff5b0d219..a84f0fd4f 100644 --- a/src/debugger/gui/Cart3FWidget.cxx +++ b/src/debugger/gui/Cart3FWidget.cxx @@ -33,7 +33,7 @@ string Cartridge3FWidget::description() { ostringstream info; size_t size; - const uInt8* image = myCart.getImage(size); + const ByteBuffer& image = myCart.getImage(size); info << "Tigervision 3F cartridge, 2 - 256 2K banks\n" << "First 2K bank selected by writing to " << hotspotStr() << "\n" diff --git a/src/debugger/gui/CartEnhancedWidget.cxx b/src/debugger/gui/CartEnhancedWidget.cxx index af110cb0d..97beb1f6b 100644 --- a/src/debugger/gui/CartEnhancedWidget.cxx +++ b/src/debugger/gui/CartEnhancedWidget.cxx @@ -94,7 +94,7 @@ string CartridgeEnhancedWidget::romDescription() { ostringstream info; size_t size; - const uInt8* image = myCart.getImage(size); + const ByteBuffer& image = myCart.getImage(size); if(myCart.romBankCount() > 1) { diff --git a/src/emucore/Cart.cxx b/src/emucore/Cart.cxx index 958b915df..045d4c784 100644 --- a/src/emucore/Cart.cxx +++ b/src/emucore/Cart.cxx @@ -56,14 +56,14 @@ bool Cartridge::saveROM(ofstream& out) const { size_t size = 0; - const uInt8* image = getImage(size); - if(image == nullptr || size == 0) + const ByteBuffer& image = getImage(size); + if(size == 0) { cerr << "save not supported" << endl; return false; } - out.write(reinterpret_cast(image), size); + out.write(reinterpret_cast(image.get()), size); return true; } diff --git a/src/emucore/Cart.hxx b/src/emucore/Cart.hxx index 0e70f4bf7..8ccd10d79 100644 --- a/src/emucore/Cart.hxx +++ b/src/emucore/Cart.hxx @@ -229,9 +229,9 @@ class Cartridge : public Device Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - virtual const uInt8* getImage(size_t& size) const = 0; + virtual const ByteBuffer& getImage(size_t& size) const = 0; /** Get a descriptor for the cart name. diff --git a/src/emucore/Cart4A50.cxx b/src/emucore/Cart4A50.cxx index 845229bc4..6939bc0ef 100644 --- a/src/emucore/Cart4A50.cxx +++ b/src/emucore/Cart4A50.cxx @@ -24,6 +24,7 @@ Cartridge4A50::Cartridge4A50(const ByteBuffer& image, size_t size, const string& md5, const Settings& settings) : Cartridge(settings, md5), + myImage(make_unique(128_KB)), mySize(size) { // Copy the ROM image into my buffer @@ -32,7 +33,7 @@ Cartridge4A50::Cartridge4A50(const ByteBuffer& image, size_t size, else if(size < 128_KB) size = 64_KB; else size = 128_KB; for(uInt32 slice = 0; slice < 128_KB / size; ++slice) - std::copy_n(image.get(), size, myImage.begin() + (slice*size)); + std::copy_n(image.get(), size, myImage.get() + (slice*size)); // We use System::PageAccess.romAccessBase, but don't allow its use // through a pointer, since the address space of 4A50 carts can change @@ -41,7 +42,7 @@ Cartridge4A50::Cartridge4A50(const ByteBuffer& image, size_t size, // // Instead, access will be through the getAccessFlags and setAccessFlags // methods below - createRomAccessArrays(myImage.size() + myRAM.size()); + createRomAccessArrays(128_KB + myRAM.size()); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -350,10 +351,10 @@ bool Cartridge4A50::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* Cartridge4A50::getImage(size_t& size) const +const ByteBuffer& Cartridge4A50::getImage(size_t& size) const { size = mySize; - return myImage.data(); + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/Cart4A50.hxx b/src/emucore/Cart4A50.hxx index e68bb8f4a..8a4fdaa2d 100644 --- a/src/emucore/Cart4A50.hxx +++ b/src/emucore/Cart4A50.hxx @@ -96,9 +96,9 @@ class Cartridge4A50 : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. @@ -220,7 +220,7 @@ class Cartridge4A50 : public Cartridge private: // The 128K ROM image of the cartridge - std::array myImage; + ByteBuffer myImage; // The 32K of RAM on the cartridge std::array myRAM; diff --git a/src/emucore/CartAR.cxx b/src/emucore/CartAR.cxx index 08f803e0b..cc58d60be 100644 --- a/src/emucore/CartAR.cxx +++ b/src/emucore/CartAR.cxx @@ -420,10 +420,10 @@ bool CartridgeAR::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeAR::getImage(size_t& size) const +const ByteBuffer& CartridgeAR::getImage(size_t& size) const { size = mySize; - return myLoadImages.get(); + return myLoadImages; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartAR.hxx b/src/emucore/CartAR.hxx index 349de38f1..0b4369f31 100644 --- a/src/emucore/CartAR.hxx +++ b/src/emucore/CartAR.hxx @@ -105,9 +105,9 @@ class CartridgeAR : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. diff --git a/src/emucore/CartBUS.cxx b/src/emucore/CartBUS.cxx index 62000118b..46d220bbf 100644 --- a/src/emucore/CartBUS.cxx +++ b/src/emucore/CartBUS.cxx @@ -43,17 +43,18 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CartridgeBUS::CartridgeBUS(const ByteBuffer& image, size_t size, const string& md5, const Settings& settings) - : Cartridge(settings, md5) + : Cartridge(settings, md5), + myImage(make_unique(32_KB)) { // Copy the ROM image into my buffer - std::copy_n(image.get(), std::min(myImage.size(), size), myImage.begin()); + std::copy_n(image.get(), std::min(32_KB, size), myImage.get()); // Even though the ROM is 32K, only 28K is accessible to the 6507 createRomAccessArrays(28_KB); // Pointer to the program ROM (28K @ 0 byte offset) // which starts after the 2K BUS Driver and 2K C Code - myProgramImage = myImage.data() + 4_KB; + myProgramImage = myImage.get() + 4_KB; // Pointer to BUS driver in RAM myDriverImage = myRAM.data(); @@ -64,9 +65,9 @@ CartridgeBUS::CartridgeBUS(const ByteBuffer& image, size_t size, // Create Thumbulator ARM emulator bool devSettings = settings.getBool("dev.settings"); myThumbEmulator = make_unique( - reinterpret_cast(myImage.data()), + reinterpret_cast(myImage.get()), reinterpret_cast(myRAM.data()), - static_cast(myImage.size()), + static_cast(32_KB), devSettings ? settings.getBool("dev.thumb.trapfatal") : false, Thumbulator::ConfigureFor::BUS, this ); @@ -95,7 +96,7 @@ void CartridgeBUS::reset() void CartridgeBUS::setInitialState() { // Copy initial BUS driver to Harmony RAM - std::copy_n(myImage.begin(), 2_KB, myDriverImage); + std::copy_n(myImage.get(), 2_KB, myDriverImage); myMusicWaveformSize.fill(27); @@ -478,10 +479,10 @@ bool CartridgeBUS::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeBUS::getImage(size_t& size) const +const ByteBuffer& CartridgeBUS::getImage(size_t& size) const { - size = myImage.size(); - return myImage.data(); + size = 32_KB; + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartBUS.hxx b/src/emucore/CartBUS.hxx index 58e4eea48..2e21b5f24 100644 --- a/src/emucore/CartBUS.hxx +++ b/src/emucore/CartBUS.hxx @@ -116,9 +116,9 @@ class CartridgeBUS : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. @@ -214,7 +214,7 @@ class CartridgeBUS : public Cartridge private: // The 32K ROM image of the cartridge - std::array myImage; + ByteBuffer myImage; // Pointer to the 28K program ROM image of the cartridge uInt8* myProgramImage{nullptr}; diff --git a/src/emucore/CartCDF.cxx b/src/emucore/CartCDF.cxx index 09e0da3e3..e09480464 100644 --- a/src/emucore/CartCDF.cxx +++ b/src/emucore/CartCDF.cxx @@ -59,17 +59,19 @@ namespace { // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CartridgeCDF::CartridgeCDF(const ByteBuffer& image, size_t size, const string& md5, const Settings& settings) - : Cartridge(settings, md5) + : Cartridge(settings, md5), + myImage(make_unique(32_KB)) { // Copy the ROM image into my buffer - std::copy_n(image.get(), std::min(myImage.size(), size), myImage.begin()); + std::fill_n(myImage.get(), 32_KB, 0); + std::copy_n(image.get(), std::min(32_KB, size), myImage.get()); // even though the ROM is 32K, only 28K is accessible to the 6507 createRomAccessArrays(28_KB); // Pointer to the program ROM (28K @ 0 byte offset) // which starts after the 2K CDF Driver and 2K C Code - myProgramImage = myImage.data() + 4_KB; + myProgramImage = myImage.get() + 4_KB; // Pointer to CDF driver in RAM myDriverImage = myRAM.data(); @@ -82,9 +84,9 @@ CartridgeCDF::CartridgeCDF(const ByteBuffer& image, size_t size, // Create Thumbulator ARM emulator bool devSettings = settings.getBool("dev.settings"); myThumbEmulator = make_unique( - reinterpret_cast(myImage.data()), + reinterpret_cast(myImage.get()), reinterpret_cast(myRAM.data()), - static_cast(myImage.size()), + static_cast(32_KB), devSettings ? settings.getBool("dev.thumb.trapfatal") : false, thumulatorConfiguration(myCDFSubtype), this); setInitialState(); @@ -111,7 +113,7 @@ void CartridgeCDF::reset() void CartridgeCDF::setInitialState() { // Copy initial CDF driver to Harmony RAM - std::copy_n(myImage.begin(), 2_KB, myDriverImage); + std::copy_n(myImage.get(), 2_KB, myDriverImage); myMusicWaveformSize.fill(27); @@ -451,10 +453,10 @@ bool CartridgeCDF::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeCDF::getImage(size_t& size) const +const ByteBuffer& CartridgeCDF::getImage(size_t& size) const { - size = myImage.size(); - return myImage.data(); + size = 32_KB; + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartCDF.hxx b/src/emucore/CartCDF.hxx index 62c1721ca..99374de2b 100644 --- a/src/emucore/CartCDF.hxx +++ b/src/emucore/CartCDF.hxx @@ -122,9 +122,9 @@ class CartridgeCDF : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. @@ -214,7 +214,7 @@ class CartridgeCDF : public Cartridge private: // The 32K ROM image of the cartridge - std::array myImage; + ByteBuffer myImage; // Pointer to the 28K program ROM image of the cartridge uInt8* myProgramImage{nullptr}; diff --git a/src/emucore/CartCM.cxx b/src/emucore/CartCM.cxx index b5dfc5197..dbaac7a54 100644 --- a/src/emucore/CartCM.cxx +++ b/src/emucore/CartCM.cxx @@ -23,11 +23,12 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CartridgeCM::CartridgeCM(const ByteBuffer& image, size_t size, const string& md5, const Settings& settings) - : Cartridge(settings, md5) + : Cartridge(settings, md5), + myImage(make_unique(16_KB)) { // Copy the ROM image into my buffer - std::copy_n(image.get(), std::min(myImage.size(), size), myImage.begin()); - createRomAccessArrays(myImage.size()); + std::copy_n(image.get(), std::min(16_KB, size), myImage.get()); + createRomAccessArrays(16_KB); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -184,10 +185,10 @@ bool CartridgeCM::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeCM::getImage(size_t& size) const +const ByteBuffer& CartridgeCM::getImage(size_t& size) const { - size = myImage.size(); - return myImage.data(); + size = 16_KB; + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartCM.hxx b/src/emucore/CartCM.hxx index 36fa13fa8..3a58889b4 100644 --- a/src/emucore/CartCM.hxx +++ b/src/emucore/CartCM.hxx @@ -173,9 +173,9 @@ class CartridgeCM : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. @@ -246,7 +246,7 @@ class CartridgeCM : public Cartridge shared_ptr myCompuMate; // The 16K ROM image of the cartridge - std::array myImage; + ByteBuffer myImage; // The 2K of RAM std::array myRAM; diff --git a/src/emucore/CartCTY.cxx b/src/emucore/CartCTY.cxx index dbb5d13e2..67647f89c 100644 --- a/src/emucore/CartCTY.cxx +++ b/src/emucore/CartCTY.cxx @@ -24,18 +24,19 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CartridgeCTY::CartridgeCTY(const ByteBuffer& image, size_t size, const string& md5, const Settings& settings) - : Cartridge(settings, md5) + : Cartridge(settings, md5), + myImage(make_unique(32_KB)) { // Copy the ROM image into my buffer - std::copy_n(image.get(), std::min(myImage.size(), size), myImage.begin()); - createRomAccessArrays(myImage.size()); + std::copy_n(image.get(), std::min(32_KB, size), myImage.get()); + createRomAccessArrays(32_KB); // Default to no tune data in case user is utilizing an old ROM myTuneData.fill(0); // Extract tune data if it exists - if(size > myImage.size()) - std::copy_n(image.get() + myImage.size(), size - myImage.size(), myTuneData.begin()); + if(size > 32_KB) + std::copy_n(image.get() + 32_KB, size - 32_KB, myTuneData.begin()); // Point to the first tune myFrequencyImage = myTuneData.data(); @@ -279,10 +280,10 @@ bool CartridgeCTY::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeCTY::getImage(size_t& size) const +const ByteBuffer& CartridgeCTY::getImage(size_t& size) const { - size = myImage.size(); - return myImage.data(); + size = 32_KB; + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartCTY.hxx b/src/emucore/CartCTY.hxx index 1cd682446..5af3ceff4 100644 --- a/src/emucore/CartCTY.hxx +++ b/src/emucore/CartCTY.hxx @@ -171,9 +171,9 @@ class CartridgeCTY : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. @@ -263,7 +263,7 @@ class CartridgeCTY : public Cartridge private: // The 32K ROM image of the cartridge - std::array myImage; + ByteBuffer myImage; // The 28K ROM image of the music std::array myTuneData; diff --git a/src/emucore/CartDPCPlus.cxx b/src/emucore/CartDPCPlus.cxx index 7a0a7f4c6..71500ee94 100644 --- a/src/emucore/CartDPCPlus.cxx +++ b/src/emucore/CartDPCPlus.cxx @@ -29,17 +29,18 @@ CartridgeDPCPlus::CartridgeDPCPlus(const ByteBuffer& image, size_t size, const string& md5, const Settings& settings) : Cartridge(settings, md5), - mySize(std::min(size, myImage.size())) + myImage(make_unique(32_KB)), + mySize(std::min(size, 32_KB)) { - // Image is always 32K, but in the case of ROM > 29K, the image is + // Image is always 32K, but in the case of ROM < 32K, the image is // copied to the end of the buffer - if(mySize < myImage.size()) - myImage.fill(0); - std::copy_n(image.get(), size, myImage.begin() + (myImage.size() - mySize)); + if(mySize < 32_KB) + std::fill_n(myImage.get(), mySize, 0); + std::copy_n(image.get(), size, myImage.get() + (32_KB - mySize)); createRomAccessArrays(24_KB); // Pointer to the program ROM (24K @ 3K offset; ignore first 3K) - myProgramImage = myImage.data() + 3_KB; + myProgramImage = myImage.get() + 3_KB; // Pointer to the display RAM myDisplayImage = myDPCRAM.data() + 3_KB; @@ -50,9 +51,9 @@ CartridgeDPCPlus::CartridgeDPCPlus(const ByteBuffer& image, size_t size, // Create Thumbulator ARM emulator bool devSettings = settings.getBool("dev.settings"); myThumbEmulator = make_unique - (reinterpret_cast(myImage.data()), + (reinterpret_cast(myImage.get()), reinterpret_cast(myDPCRAM.data()), - static_cast(myImage.size()), + static_cast(32_KB), devSettings ? settings.getBool("dev.thumb.trapfatal") : false, Thumbulator::ConfigureFor::DPCplus, this); @@ -640,10 +641,10 @@ bool CartridgeDPCPlus::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeDPCPlus::getImage(size_t& size) const +const ByteBuffer& CartridgeDPCPlus::getImage(size_t& size) const { size = mySize; - return myImage.data() + (myImage.size() - mySize); + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartDPCPlus.hxx b/src/emucore/CartDPCPlus.hxx index bbbf68197..04a1b0de4 100644 --- a/src/emucore/CartDPCPlus.hxx +++ b/src/emucore/CartDPCPlus.hxx @@ -118,9 +118,9 @@ class CartridgeDPCPlus : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. @@ -203,7 +203,7 @@ class CartridgeDPCPlus : public Cartridge private: // The ROM image and size - std::array myImage; + ByteBuffer myImage; size_t mySize{0}; // Pointer to the 24K program ROM image of the cartridge diff --git a/src/emucore/CartEnhanced.cxx b/src/emucore/CartEnhanced.cxx index 28b8b026c..633104cf3 100644 --- a/src/emucore/CartEnhanced.cxx +++ b/src/emucore/CartEnhanced.cxx @@ -364,10 +364,10 @@ bool CartridgeEnhanced::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeEnhanced::getImage(size_t& size) const +const ByteBuffer& CartridgeEnhanced::getImage(size_t& size) const { size = mySize; - return myImage.get(); + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartEnhanced.hxx b/src/emucore/CartEnhanced.hxx index c50f88aa6..e99afc917 100644 --- a/src/emucore/CartEnhanced.hxx +++ b/src/emucore/CartEnhanced.hxx @@ -120,9 +120,9 @@ class CartridgeEnhanced : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. diff --git a/src/emucore/CartF6.cxx b/src/emucore/CartF6.cxx index 0e4bcf678..7b120d0b0 100644 --- a/src/emucore/CartF6.cxx +++ b/src/emucore/CartF6.cxx @@ -37,4 +37,3 @@ bool CartridgeF6::checkSwitchBank(uInt16 address, uInt8) } return false; } - diff --git a/src/emucore/CartMNetwork.cxx b/src/emucore/CartMNetwork.cxx index 84cf8dac8..78c68e6a0 100644 --- a/src/emucore/CartMNetwork.cxx +++ b/src/emucore/CartMNetwork.cxx @@ -263,10 +263,10 @@ bool CartridgeMNetwork::patch(uInt16 address, uInt8 value) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const uInt8* CartridgeMNetwork::getImage(size_t& size) const +const ByteBuffer& CartridgeMNetwork::getImage(size_t& size) const { size = romBankCount() * BANK_SIZE; - return myImage.get(); + return myImage; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/emucore/CartMNetwork.hxx b/src/emucore/CartMNetwork.hxx index 7b4fdb729..9b17a4b67 100644 --- a/src/emucore/CartMNetwork.hxx +++ b/src/emucore/CartMNetwork.hxx @@ -126,9 +126,9 @@ class CartridgeMNetwork : public Cartridge Access the internal ROM image for this cartridge. @param size Set to the size of the internal ROM image data - @return A pointer to the internal ROM image data + @return A reference to the internal ROM image data */ - const uInt8* getImage(size_t& size) const override; + const ByteBuffer& getImage(size_t& size) const override; /** Save the current state of this cart to the given Serializer. diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 1e796a0bd..e6afa0aa4 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -726,7 +726,7 @@ void Console::setControllers(const string& romMd5) Controller::Type leftType = Controller::getType(myProperties.get(PropType::Controller_Left)); Controller::Type rightType = Controller::getType(myProperties.get(PropType::Controller_Right)); size_t size = 0; - const uInt8* image = myCart->getImage(size); + const ByteBuffer& image = myCart->getImage(size); const bool swappedPorts = myProperties.get(PropType::Console_SwapPorts) == "YES"; // Try to detect controllers diff --git a/src/emucore/ControllerDetector.cxx b/src/emucore/ControllerDetector.cxx index 6609340df..95922051b 100644 --- a/src/emucore/ControllerDetector.cxx +++ b/src/emucore/ControllerDetector.cxx @@ -22,8 +22,10 @@ #include "ControllerDetector.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Controller::Type ControllerDetector::detectType(const uInt8* image, size_t size, - const Controller::Type type, const Controller::Jack port, const Settings& settings) +Controller::Type ControllerDetector::detectType( + const ByteBuffer& image, size_t size, + const Controller::Type type, const Controller::Jack port, + const Settings& settings) { if(type == Controller::Type::Unknown || settings.getBool("rominfo")) { @@ -43,7 +45,7 @@ Controller::Type ControllerDetector::detectType(const uInt8* image, size_t size, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -string ControllerDetector::detectName(const uInt8* image, size_t size, +string ControllerDetector::detectName(const ByteBuffer& image, size_t size, const Controller::Type controller, const Controller::Jack port, const Settings& settings) { @@ -51,7 +53,8 @@ string ControllerDetector::detectName(const uInt8* image, size_t size, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Controller::Type ControllerDetector::autodetectPort(const uInt8* image, size_t size, +Controller::Type ControllerDetector::autodetectPort( + const ByteBuffer& image, size_t size, Controller::Jack port, const Settings& settings) { // default type joystick @@ -88,7 +91,7 @@ Controller::Type ControllerDetector::autodetectPort(const uInt8* image, size_t s } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::searchForBytes(const uInt8* image, size_t imagesize, +bool ControllerDetector::searchForBytes(const ByteBuffer& image, size_t imagesize, const uInt8* signature, uInt32 sigsize) { if (imagesize >= sigsize) @@ -112,7 +115,7 @@ bool ControllerDetector::searchForBytes(const uInt8* image, size_t imagesize, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::usesJoystickButton(const uInt8* image, size_t size, +bool ControllerDetector::usesJoystickButton(const ByteBuffer& image, size_t size, Controller::Jack port) { if(port == Controller::Jack::Left) @@ -242,7 +245,7 @@ bool ControllerDetector::usesJoystickButton(const uInt8* image, size_t size, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::usesKeyboard(const uInt8* image, size_t size, +bool ControllerDetector::usesKeyboard(const ByteBuffer& image, size_t size, Controller::Jack port) { if(port == Controller::Jack::Left) @@ -383,7 +386,7 @@ bool ControllerDetector::usesKeyboard(const uInt8* image, size_t size, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::usesGenesisButton(const uInt8* image, size_t size, +bool ControllerDetector::usesGenesisButton(const ByteBuffer& image, size_t size, Controller::Jack port) { if(port == Controller::Jack::Left) @@ -440,7 +443,7 @@ bool ControllerDetector::usesGenesisButton(const uInt8* image, size_t size, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::usesPaddle(const uInt8* image, size_t size, +bool ControllerDetector::usesPaddle(const ByteBuffer& image, size_t size, Controller::Jack port, const Settings& settings) { if(port == Controller::Jack::Left) @@ -549,7 +552,7 @@ bool ControllerDetector::usesPaddle(const uInt8* image, size_t size, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::isProbablyTrakBall(const uInt8* image, size_t size) +bool ControllerDetector::isProbablyTrakBall(const ByteBuffer& image, size_t size) { // check for TrakBall tables const int NUM_SIGS = 3; @@ -568,7 +571,7 @@ bool ControllerDetector::isProbablyTrakBall(const uInt8* image, size_t size) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::isProbablyAtariMouse(const uInt8* image, size_t size) +bool ControllerDetector::isProbablyAtariMouse(const ByteBuffer& image, size_t size) { // check for Atari Mouse tables const int NUM_SIGS = 3; @@ -587,7 +590,7 @@ bool ControllerDetector::isProbablyAtariMouse(const uInt8* image, size_t size) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::isProbablyAmigaMouse(const uInt8* image, size_t size) +bool ControllerDetector::isProbablyAmigaMouse(const ByteBuffer& image, size_t size) { // check for Amiga Mouse tables const int NUM_SIGS = 4; @@ -607,7 +610,7 @@ bool ControllerDetector::isProbablyAmigaMouse(const uInt8* image, size_t size) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::isProbablySaveKey(const uInt8* image, size_t size, +bool ControllerDetector::isProbablySaveKey(const ByteBuffer& image, size_t size, Controller::Jack port) { // check for known SaveKey code, only supports right port @@ -652,7 +655,7 @@ bool ControllerDetector::isProbablySaveKey(const uInt8* image, size_t size, } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -bool ControllerDetector::isProbablyLightGun(const uInt8* image, size_t size, +bool ControllerDetector::isProbablyLightGun(const ByteBuffer& image, size_t size, Controller::Jack port) { if (port == Controller::Jack::Left) diff --git a/src/emucore/ControllerDetector.hxx b/src/emucore/ControllerDetector.hxx index d37076eb1..be24ae09d 100644 --- a/src/emucore/ControllerDetector.hxx +++ b/src/emucore/ControllerDetector.hxx @@ -34,14 +34,14 @@ class ControllerDetector /** Detects the controller type at the given port if no controller is provided. - @param image A pointer to the ROM image + @param image A reference to the ROM image @param size The size of the ROM image @param controller The provided controller type of the ROM image @param port The port to be checked @param settings A reference to the various settings (read-only) @return The detected controller type */ - static Controller::Type detectType(const uInt8* image, size_t size, + static Controller::Type detectType(const ByteBuffer& image, size_t size, const Controller::Type controller, const Controller::Jack port, const Settings& settings); @@ -49,7 +49,7 @@ class ControllerDetector Detects the controller type at the given port if no controller is provided and returns its name. - @param image A pointer to the ROM image + @param image A reference to the ROM image @param size The size of the ROM image @param type The provided controller type of the ROM image @param port The port to be checked @@ -57,7 +57,7 @@ class ControllerDetector @return The (detected) controller name */ - static string detectName(const uInt8* image, size_t size, + static string detectName(const ByteBuffer& image, size_t size, const Controller::Type type, const Controller::Jack port, const Settings& settings); @@ -65,14 +65,14 @@ class ControllerDetector /** Detects the controller type at the given port. - @param image A pointer to the ROM image + @param image A reference to the ROM image @param size The size of the ROM image @param port The port to be checked @param settings A reference to the various settings (read-only) @return The detected controller type */ - static Controller::Type autodetectPort(const uInt8* image, size_t size, + static Controller::Type autodetectPort(const ByteBuffer& image, size_t size, Controller::Jack port, const Settings& settings); /** @@ -85,36 +85,41 @@ class ControllerDetector @return True if the signature was found, else false */ - static bool searchForBytes(const uInt8* image, size_t imagesize, + static bool searchForBytes(const ByteBuffer& image, size_t imagesize, const uInt8* signature, uInt32 sigsize); // Returns true if the port's joystick button access code is found. - static bool usesJoystickButton(const uInt8* image, size_t size, Controller::Jack port); + static bool usesJoystickButton(const ByteBuffer& image, size_t size, + Controller::Jack port); // Returns true if the port's keyboard access code is found. - static bool usesKeyboard(const uInt8* image, size_t size, Controller::Jack port); + static bool usesKeyboard(const ByteBuffer& image, size_t size, + Controller::Jack port); // Returns true if the port's 2nd Genesis button access code is found. - static bool usesGenesisButton(const uInt8* image, size_t size, Controller::Jack port); + static bool usesGenesisButton(const ByteBuffer& image, size_t size, + Controller::Jack port); // Returns true if the port's paddle button access code is found. - static bool usesPaddle(const uInt8* image, size_t size, Controller::Jack port, - const Settings& settings); + static bool usesPaddle(const ByteBuffer& image, size_t size, + Controller::Jack port, const Settings& settings); // Returns true if a Trak-Ball table is found. - static bool isProbablyTrakBall(const uInt8* image, size_t size); + static bool isProbablyTrakBall(const ByteBuffer& image, size_t size); // Returns true if an Atari Mouse table is found. - static bool isProbablyAtariMouse(const uInt8* image, size_t size); + static bool isProbablyAtariMouse(const ByteBuffer& image, size_t size); // Returns true if an Amiga Mouse table is found. - static bool isProbablyAmigaMouse(const uInt8* image, size_t size); + static bool isProbablyAmigaMouse(const ByteBuffer& image, size_t size); // Returns true if a SaveKey code pattern is found. - static bool isProbablySaveKey(const uInt8* image, size_t size, Controller::Jack port); + static bool isProbablySaveKey(const ByteBuffer& image, size_t size, + Controller::Jack port); // Returns true if a Lightgun code pattern is found - static bool isProbablyLightGun(const uInt8* image, size_t size, Controller::Jack port); + static bool isProbablyLightGun(const ByteBuffer& image, size_t size, + Controller::Jack port); private: @@ -127,4 +132,3 @@ class ControllerDetector }; #endif - diff --git a/src/gui/GameInfoDialog.cxx b/src/gui/GameInfoDialog.cxx index 2348e047d..ff1fca0c6 100644 --- a/src/gui/GameInfoDialog.cxx +++ b/src/gui/GameInfoDialog.cxx @@ -707,7 +707,7 @@ void GameInfoDialog::updateControllerStates() label = (!swapPorts ? instance().console().leftController().name() : instance().console().rightController().name()) + " detected"; else if(autoDetect) - label = ControllerDetector::detectName(image.get(), size, type, + label = ControllerDetector::detectName(image, size, type, !swapPorts ? Controller::Jack::Left : Controller::Jack::Right, instance().settings()) + " detected"; } @@ -722,7 +722,7 @@ void GameInfoDialog::updateControllerStates() label = (!swapPorts ? instance().console().rightController().name() : instance().console().leftController().name()) + " detected"; else if(autoDetect) - label = ControllerDetector::detectName(image.get(), size, type, + label = ControllerDetector::detectName(image, size, type, !swapPorts ? Controller::Jack::Right : Controller::Jack::Left, instance().settings()) + " detected"; } diff --git a/src/gui/RomInfoWidget.cxx b/src/gui/RomInfoWidget.cxx index 3cfa43185..b90a45fb2 100644 --- a/src/gui/RomInfoWidget.cxx +++ b/src/gui/RomInfoWidget.cxx @@ -152,10 +152,10 @@ void RomInfoWidget::parseProperties(const FilesystemNode& node) (image = instance().openROM(node, md5, size)) != nullptr) { Logger::debug(myProperties.get(PropType::Cart_Name) + ":"); - left = ControllerDetector::detectName(image.get(), size, leftType, + left = ControllerDetector::detectName(image, size, leftType, !swappedPorts ? Controller::Jack::Left : Controller::Jack::Right, instance().settings()); - right = ControllerDetector::detectName(image.get(), size, rightType, + right = ControllerDetector::detectName(image, size, rightType, !swappedPorts ? Controller::Jack::Right : Controller::Jack::Left, instance().settings()); if (bsDetected == "AUTO") diff --git a/src/gui/StellaSettingsDialog.cxx b/src/gui/StellaSettingsDialog.cxx index b5c1e5106..74e8ca35f 100644 --- a/src/gui/StellaSettingsDialog.cxx +++ b/src/gui/StellaSettingsDialog.cxx @@ -540,7 +540,7 @@ void StellaSettingsDialog::updateControllerStates() if(instance().hasConsole()) label = (instance().console().leftController().name()) + " detected"; else if(autoDetect) - label = ControllerDetector::detectName(image.get(), size, type, + label = ControllerDetector::detectName(image, size, type, Controller::Jack::Left, instance().settings()) + " detected"; } @@ -554,7 +554,7 @@ void StellaSettingsDialog::updateControllerStates() if(instance().hasConsole()) label = (instance().console().rightController().name()) + " detected"; else if(autoDetect) - label = ControllerDetector::detectName(image.get(), size, type, + label = ControllerDetector::detectName(image, size, type, Controller::Jack::Right, instance().settings()) + " detected"; }